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