httpd系统自带启动脚本分析
发布时间:2021-11-21 21:25:29 所属栏目:教程 来源:互联网
导读:面上有很多关于脚本的书籍和教程,好是好,可写的越来越像编程书。其中不仅有算法的介绍,比如递归,冒泡法,高效,冗余。还伴有非常高深的案例,看的是云里雾里,头昏脑胀。看完以后感觉如下,书是好书,例子是好例子,算法更是好算法,可多少有些脱离实际
面上有很多关于脚本的书籍和教程,好是好,可写的越来越像编程书。其中不仅有算法的介绍,比如递归,冒泡法,高效,冗余。还伴有非常高深的案例,看的是云里雾里,头昏脑胀。看完以后感觉如下,书是好书,例子是好例子,算法更是好算法,可多少有些脱离实际,提高的可以,干活的不成。对于没有任何程序开发基础的同志来说更是如此。 可那些书就不看了吗?答案是否定的,这些书上所撰写的内容虽然晦涩可都是好东西。但攘外必先安内,在看这些书之前,我认为,更重要的应该先要搞清楚系统本身的脚本。作为发行版系统中使用的脚本,肯定都是经典中的经典,除了能够帮助我们更好的编写脚本以外,还能使我们理清linux系统服务的运行方法,更重要的是,在发生错误的时候可以让我们更快的锁定问题。可谓是一举多得。下面就是对/etc/init.d/httpd脚本的解释,不详之处还望大家谅解,欢迎各位批评指教。 #!/bin/bash # # httpd Startup script for the Apache HTTP Server # # chkconfig: - 85 15 # description: Apache is a World Wide Web server. It is used to serve # HTML files and CGI. # processname: httpd # config: /etc/httpd/conf/httpd.conf # config: /etc/sysconfig/httpd # pidfile: /var/run/httpd.pid # Source function library. #以上皆为注释,可以忽略。 . /etc/rc.d/init.d/functions #"."等价于source,在这里等同于C语言中的include。讲function中函数及变量的定义导入到当前脚本的执行环境中。 if [ -f /etc/sysconfig/httpd ]; then . /etc/sysconfig/httpd fi #如果httpd为文件,那么也将其导入到当前脚本执行环境中。 HTTPD_LANG=${HTTPD_LANG-"C"} #如果变量HTTPD_LANG未定义,那么将其定义为"C",即英文 INITLOG_ARGS="" apachectl=/usr/sbin/apachectl httpd=${HTTPD-/usr/sbin/httpd} prog=httpd pidfile=${PIDFILE-/var/run/httpd.pid} lockfile=${LOCKFILE-/var/lock/subsys/httpd} #定义一系列变量,用于后面的执行。 RETVAL=0 #定义全局命令返回变量 check13 () { CONFFILE=/etc/httpd/conf/httpd.conf GONE="(ServerType|BindAddress|Port|AddModule|ClearModuleList|" GONE="${GONE}AgentLog|RefererLog|RefererIgnore|FancyIndexing|" GONE="${GONE}AccessConfig|ResourceConfig)" if LANG=C grep -Eiq "^[[:space:]]*($GONE)" $CONFFILE; then echo echo 1>&2 " Apache 1.3 configuration directives found" echo 1>&2 " please read /usr/share/doc/httpd-2.0.52/migration.html" failure "Apache 1.3 config directives test" echo exit 1 fi } #定义check13函数,用于测试配置文件中是否有apache1.3的配置,如果有就显示相应的错误提示并退出脚本。grep -E参数为支持扩展的正则表达式,-i或略大小写,-q静默输出即结果不显示在标准输出中。该函数通过在配置文件中查找GONE变量中用"|"分隔的内容来确认配置文件的正确与否。^[[:space:]]*为正则表达式,代表若干个空格开头。其中[[:space:]]为POSIX字符。 start() { echo -n $"Starting $prog: " check13 || exit 1 LANG=$HTTPD_LANG daemon $httpd $OPTIONS RETVAL=$? echo [ $RETVAL = 0 ] && touch ${lockfile} return $RETVAL } #定义start函数,用于apache的启动。 #如果daemon /usr/sbin/httpd 成功就建立/var/lock/subsys/httpd文件。daemon表示启动一个新的后台进程与nohup相似。/usr/sbin/httpd来源于$httpd变量,变量$OPTIONS来源于/etc/sysconfig/httpd stop() { echo -n $"Stopping $prog: " killproc -d 10 $httpd RETVAL=$? echo [ $RETVAL = 0 ] && rm -f ${lockfile} ${pidfile} } #定义stop函数,用于apache的关闭。 #从脚本中可以看到,apache的关闭实际上是通过,killproc -d 10 完成的,并且删除pid文件。 reload() { echo -n $"Reloading $prog: " if ! LANG=$HTTPD_LANG $httpd $OPTIONS -t >&/dev/null; then RETVAL=$? echo $"not reloading due to configuration syntax error" failure $"not reloading $httpd due to configuration syntax error" else killproc $httpd -HUP RETVAL=$? fi echo } #定义reload函数,用于apache的重新加载。 #通过/usr/sbin/httpd -t命令对配置文件进行测试,如果出错就显示"not reloading due to configuration syntax error"的错误提示,否则将通过 killproc $httpd -HUP来达到重新加载apache的目的。 case "$1" in #$1表示执行脚本时的第一个参数 start) start #如果参数为start,执行start函数 ;; stop) stop #如果参数为stop,执行stop函数 ;; status)#如果参数为status,执行status函数,函数定义在function文件中 status $httpd RETVAL=$? ;; restart)#如果参数为restart,首先执行stop函数,再执行start函数 stop start ;; condrestart)#在apache已经运行的情况下,再执行restart操作。 if [ -f ${pidfile} ] ; then stop start fi ;; reload)#如果参数为reload,执行reload函数 reload ;; *)#如果不符合以上参数,将提示出错信息。 echo $"Usage: $prog {start|stop|restart|condrestart|reload|status|fullstatus|graceful|help|configtest}" exit 1 esac exit $RETVAL ![]() (编辑:江门站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |