Service

使用“服務”命令初始化腳本無法正常工作

  • July 5, 2016

我有以下啟動腳本,它應該以分離模式啟動或停止螢幕:

#!/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 中沒有腳本日誌,請嘗試在腳本中添加調試資訊

引用自:https://serverfault.com/questions/787929