Service
使用“服務”命令初始化腳本無法正常工作
我有以下啟動腳本,它應該以分離模式啟動或停止螢幕:
#!/bin/sh # node2 # Maintainer: @KittBlog # Authors: mk@kittmedia.com ### 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 中沒有腳本日誌,請嘗試在腳本中添加調試資訊