LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 167|回复: 0

start函数分析

[复制链接]
发表于 2023-12-20 14:42:48 | 显示全部楼层 |阅读模式

start函数分析

以httpd的服务管理脚本/etc/init.d/httpd为例。

start() {
    echo -n $"Starting $prog: "
    LANG=$HTTPD_LANG daemon --pidfile=${pidfile} $httpd $OPTIONS
    RETVAL=$?
    echo
    [ $RETVAL = 0 ] && touch ${lockfile}
    return $RETVAL
}
函数首先输出Starting $prog信息,再使用daemon启动$httpd程序。

在daemon语句中,--pidfile是daemon的参数,该参数为daemon检测pid文件是否存在,$httpd进程是否已在运行。注意,这个--pidfile是写在$httpd前面的,表示这是daemon的参数,而非$httpd的启动参数。

检测完成后,启动程序。程序的启动命令从$httpd参数开始,$OPTIONS是$httpd的启动选项。一般出现$OPTIONS这个字眼,很可能加载了/etc/sysconfig目录下的同名文件,目的是提供程序启动参数。

如果启动成功,则会daemon函数会调用functions中的success函数显示[ OK ],否则会显示[ FAILED ]。

最后,如果启动成功,则会创建该进程的锁文件$lockfile。锁文件一般都在/var/lock/subsys目录下。

很多时候,管理的进程也有--pidfile类似的选项。例如下面的启动语句:

daemon --pidfile $pidfile $processname --pidfile=$pidfile
两个--pidfile选项,但他们的作用是不一样的。第一个--pidfile是daemon函数的参数,以便daemon能够检测该文件中的pid进程是否已在运行。第二个--pidfile是$processname的启动参数,启动时会创建此文件作为pid文件。

再看一个不使用daemon函数管理进程启动动作的示例。以下是/etc/init.d/sshd中的start函数内容。

start()
{
        [ -x $SSHD ] || exit 5
        [ -f /etc/ssh/sshd_config ] || exit 6
        # Create keys if necessary
        if [ "x${AUTOCREATE_SERVER_KEYS}" != xNO ]; then
                do_rsa_keygen
                if [ "x${AUTOCREATE_SERVER_KEYS}" != xRSAONLY ]; then
                        do_rsa1_keygen
                        do_dsa_keygen
                fi
        fi

        echo -n $"Starting $prog: "
        $SSHD $OPTIONS && success || failure
        RETVAL=$?
        [ $RETVAL -eq 0 ] && touch $lockfile
        echo
        return $RETVAL
}
前面多了一大段,这和服务启动脚本的框架无关,是程序自身要求的,但作用很简单。无非就是判断下程序是否可执行,配置文件是否存在,是否要创建服务端主机验证阶段的密钥对,也就是/etc/ssh/ssh\_host\_{rsa,dsa}\_key等几个文件。

再下面才是服务启动脚本中的通用逻辑部分。输出一段信息,然后启动程序,创建锁文件。但这里没有使用daemon函数管理,所以这里配合了success和failure函数以便人性化显示[ OK ]或[ FAILED ]。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表