使用“service”命令时初始化脚本无法正常工作

使用“service”命令时初始化脚本无法正常工作

我有以下启动脚本,它应该以分离模式启动或停止屏幕:

#!/bin/sh

# node2
# Maintainer: @KittBlog
# Authors: [email protected]

### BEGIN INIT INFO
# Provides:          node2
# Required-Start:    $local_fs $remote_fs $network $syslog
# Required-Stop:     $local_fs $remote_fs $network $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: node2 in screen detached mode
# Description:       node2 in screen detached mode
# chkconfig: - 85 14
### END INIT INFO
NODE_NAME=node2
SCREEN=$(which screen)
SCRIPT_PATH=/home/jail/

do_start() {
    if !($SCREEN -r | grep -o "[0-9]*\.$NODE_NAME"); then
        $SCREEN -S $NODE_NAME -d -m $SCRIPT_PATH/start-npm.sh
    fi
}

do_stop() {
    for session in $($SCREEN -r | grep -o "[0-9]*\.$NODE_NAME"); do
        $SCREEN -S "${session}" -X quit
    done
}

case "$1" in
    start|stop)
        do_$1
        ;;
    restart)
        do_stop
        do_start
        ;;
    *)
        echo "Usage: $0 {start|stop|restart|status}"
        exit 1
        ;;
esac
exit 0

如果我手动启动脚本或者通过调用使用它,它可以正常工作/etc/init.d/node2 {start|stop|restart}

除了 if 子句被忽略之外,使用也service node2 start可以正常工作,因此即使已经有一个屏幕,也总会有一个新的屏幕分离。

问题是这service node2 stop不起作用。我知道service在“可预测的环境”中运行脚本。这是个问题吗?我不能使用命令$SCREEN -r | grep -o "[0-9]*\.$NODE_NAME"来确定此环境中是否已经有一个活动屏幕吗?

答案1

根据手册页使用 $SCREEN -ls 来确定此环境中是否已有一个活动屏幕。如果 /var/log/upstart 中没有脚本日志,请尝试在脚本中添加调试信息

相关内容