博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
httpd系统自带启动脚本详解
阅读量:6000 次
发布时间:2019-06-20

本文共 3471 字,大约阅读时间需要 11 分钟。

       市面上有很多关于脚本的书籍和教程,好是好,可写的越来越像编程书。其中不仅有算法的介绍,比如递归,冒泡法,高效,冗余。还伴有非常高深的案例,看的是云里雾里,头昏脑胀。看完以后感觉如下,书是好书,例子是好例子,算法更是好算法,可多少有些脱离实际,提高的可以,干活的不成。对于没有任何程序开发基础的同志来说更是如此。
       可那些书就不看了吗?答案是否定的,这些书上所撰写的内容虽然晦涩可都是好东西。但攘外必先安内,在看这些书之前,我认为,更重要的应该先要搞清楚系统本身的脚本。作为发行版系统中使用的脚本,肯定都是经典中的经典,除了能够帮助我们更好的编写脚本以外,还能使我们理清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
     后面还会逐一的分析init.d下的脚本,之所以先拿出httpd脚本做分析,是因为httpd脚本可以算是众多脚本中比较具有代表性的,也是互联网应用中比较常用的,大家在也能参照他为源码包安装的apache做启动,所以就让他为后面将要分析的其他脚本做个开场吧。

转载地址:http://bpwmx.baihongyu.com/

你可能感兴趣的文章
JavaScript 实现小游戏power2
查看>>
在高并发的情况下,Node.js怎么生成像陌陌里面每个用户都有的 数字账号 呢,如何才会不重复呢?...
查看>>
mysql远程登录设置
查看>>
免费而稳定的企业/个人域名邮
查看>>
树莓派上自动下载py3.5安装shell脚本
查看>>
py正则分析日志 自己用的
查看>>
网站安装打包 软件环境检测与安装[二] 上
查看>>
Qt 有多少人折腾-qt for s60终于安装成功
查看>>
GO 相关资料文档
查看>>
Linux下编译安装PCRE库
查看>>
MAC 中Parallels Desktop 安装Linux
查看>>
jQuery教程:教你打造20个超级酷的视觉效果
查看>>
element ui用户头像上传
查看>>
看 37signals 如何招聘 UI 设计师
查看>>
组合问题, 给定字符集,输出特定长度的字符组合。
查看>>
判断输入是否是二元查找树
查看>>
移动端兼容性问题解决方案
查看>>
The web application [] appears to have started ...
查看>>
linux下安装ThinkJS和Forever
查看>>
SQL Server报错汇总
查看>>