init.d script com comando de tela não funciona

2

Eu escrevi este script de início simples:

SESSION_NAME="session1"
COMMAND="python /opt/aaa/manage.py runserver 192.168.1.1:4300"

case "$1" in
    start)
        screen -dmS "$SESSION_NAME" "$COMMAND" "$ARGUMENTS"
        echo "session1 started"
        ;;
    stop)
        echo "Stopping session1"
        screen -S session1 -X quit
        echo "."
        echo "session1 stopped"
        ;;
    restart)
        echo "Restarting session1"
        screen -S session1 -X quit
        echo "."
        screen -dmS "$SESSION_NAME" "$COMMAND" "$ARGUMENTS"
        echo "session1 has restarted"
        ;;
    *)
        echo "Usage: /etc/init.d/session1 {start|stop|restart}"
        exit 1
        ;;
esac
exit 0

Mas se eu executo o /etc/init.d/startscript.sh start, isso não funciona. Sessão de tela não é executada. Você pode me ajudar por favor? Obrigado por respostas.

    
por Mato 02.11.2013 / 22:05

4 respostas

0

Os problemas com os serviços são usuário e tty.

Uma maneira alternativa de executar a tela na inicialização é fazer com que o usuário efetue login automaticamente e, em seguida, inicie a tela com um conjunto pré-configurado de janelas e comandos em '~ / .screenrc'

Reconecte-se a essa tela no login.

    
por 02.11.2013 / 22:33
0

A única razão pela qual vejo sua tela não sendo inicializada é devido a um erro no comando python. Para identificar o problema, o comando de script pode ajudá-lo. Ele irá gravar a saída em um arquivo de log que você poderá ler.

Aqui está uma versão melhorada do script, com as informações que normalmente adiciono aos meus scripts:

#!/bin/sh
NAME=session1
SCRIPTNAME=/etc/init.d/$NAME
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
SESSION_NAME="session1"
COMMAND="python /opt/aaa/manage.py runserver 192.168.1.1:4300"
LOGPATH="/var/tmp/session1.log"

case "$1" in
    start)
        screen -dmS "$SESSION_NAME" script -a --flush -c "$COMMAND" $LOGPATH
        echo "session1 started"
        ;;
    stop)
        echo "Stopping session1"
        screen -S session1 -X quit
        echo "."
        echo "session1 stopped"
        ;;
    restart)
        echo "Restarting session1"
        screen -S session1 -X quit
        echo "."
        screen -dmS "$SESSION_NAME" script -a --flush -c "$COMMAND" $LOGPATH
        echo "session1 has restarted"
        ;;
    *)
        echo "Usage: $SCRIPTNAME {start|stop|restart}" >&2
        exit 2
        ;;
esac
exit 0
    
por 02.11.2013 / 22:59
0

Acho que o problema está na sua variável $COMMAND . O nome do comando deve ser o executável python , o resto é argumentos. Mas, se você colocar entre aspas, screen acha que o nome do comando é a string inteira e procura por um executável com esse nome.

Tente isto:

COMMAND="/usr/bin/python /opt/aaa/manage.py runserver 192.168.1.1:4300"

case "$1" in
    start)
        screen -dmS "$SESSION_NAME" $COMMAND
        echo "$SESSION_NAME started"
        ;;
    ...

, ou seja, sem as aspas em torno de $COMMAND e sem a variável (desnecessária) $ARGUMENTS . Isso deve funcionar.

    
por 03.11.2013 / 12:45
0

Finalmente eu usei este script, mas eu removi o comando para nova janela - Como posso iniciar uma nova janela na mesma sessão de tela automaticamente?

    
por 06.11.2013 / 23:19