O script de inicialização não funciona corretamente usando o comando "service"

1

Eu tenho o seguinte script de inicialização, que deve iniciar ou parar uma tela no modo desanexado:

#!/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

Funciona corretamente se eu iniciar o script manualmente ou se eu usá-lo chamando /etc/init.d/node2 {start|stop|restart} .

Usar também service node2 start funciona bem, exceto pelo fato de que a cláusula if está sendo ignorada, de modo que sempre há uma nova tela separada, mesmo que já exista uma.

O problema é que service node2 stop não funciona. Eu sei que service executa o script em um "ambiente previsível". Isso é um problema aqui? Não posso usar o $SCREEN -r | grep -o "[0-9]*\.$NODE_NAME" para determinar se já existe uma tela ativa nesse ambiente?

    
por KittMedia 05.07.2016 / 08:59

1 resposta

2

De acordo com manpage , use $ SCREEN -ls para determinar se já existe um arquivo ativo tela neste ambiente. Se não houver registros de seu script em / var / log / upstart, tente adicionar informações de depuração em seu script

    
por 05.07.2016 / 10:18