我有以下启动脚本,它应该以分离模式启动或停止屏幕:
#!/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}使用它,它可以正常工作。
也使用service node2 start工作正常,除了if子句被忽略,所以总是有一个新的屏幕分离即使已经有一个。
问题是service node2 stop不起作用。 我知道service在“可预测的环境”中运行脚本。 这是一个问题吗? 我不能使用$SCREEN -r | grep -o "[0-9]*\.$NODE_NAME" $SCREEN -r | grep -o "[0-9]*\.$NODE_NAME"为了确定在这个环境中是否已经有一个活动的屏幕?
根据手册页使用$ SCREEN -ls来确定在这个环境中是否已经有一个活动的屏幕。 如果/ var / log / upstart中没有脚本的日志,则尝试在脚本中添加debugging信息