Сценарий инициализации не работает должным образом при использовании команды «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} .

Также использование service node2 start работает нормально, за исключением того, что предложение if игнорируется, так что всегда есть новый экран отсоединен, даже если он уже есть.

Проблема в том, что остановка узла 2 не работает. Я знаю, что служба запускает сценарий в «предсказуемой среде». Это проблема? Я не могу использовать $ SCREEN -r | grep -o "[0-9] * \. $ NODE_NAME" , чтобы определить, есть ли уже активный экран в этой среде?

1
задан 5 July 2016 в 10:53
1 ответ

Согласно странице руководства используйте $ SCREEN -ls, чтобы определить, есть ли уже активный экран в этой среде. Если в / var / log / upstart нет журналов вашего скрипта, попробуйте добавить отладочную информацию в свой скрипт

2
ответ дан 3 December 2019 в 20:36

Теги

Похожие вопросы