start-stop-daemon没有检测到已经运行的守护进程

时间:2015-06-21 12:44:02

标签: sh daemon start-stop-daemon

我尝试复制/etc/init.d/skeleton并修改它以在后台启动程序。我想出了以下内容:

do_start()
{
    # Return
    #   0 if daemon has been started
    #   1 if daemon was already running
    #   2 if daemon could not be started
    start-stop-daemon --start --quiet --pidfile $PIDFILE -b --make-pidfile --exec $DAEMON --test > /dev/null \
        || return 1
    start-stop-daemon --start --quiet --pidfile $PIDFILE -b --make-pidfile --exec $DAEMON -- \
        $DAEMON_ARGS \
        || return 2
}

do_stop()
{
    # Return
    #   0 if daemon has been stopped
    #   1 if daemon was already stopped
    #   2 if daemon could not be stopped
    #   other if a failure occurred
    start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME
    RETVAL="$?"
    [ "$RETVAL" = 2 ] && return 2
    start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON
    [ "$?" = 2 ] && return 2
    # Many daemons don't delete their pidfiles when they exit.
    rm -f $PIDFILE
    return "$RETVAL"
}

我有一个问题和几个问题。我的问题是,启动函数启动守护进程并返回0,无论守护程序是否已经运行。我的问题是在第一次测试时是否需要-b和--make-pidfile。我是否正确假设do_stop中的第一个命令向守护进程发送一个TERM信号,第二个命令强制杀死该守护进程?在这种情况下,我将不得不等待守护进程退出。

1 个答案:

答案 0 :(得分:1)

我的问题是--exec,因为我的脚本是一个解释的脚本,start-stop-daemon无法找到运行此名称的程序,因为解释器只运行。我使用--startas修复了这个问题,除了--exec。