Das Skript init.d mit dem Befehl screen funktioniert nicht

2

Ich habe folgendes Startskript geschrieben:

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

Aber wenn ich /etc/init.d/startscript.sh starte, funktioniert es nicht. Die Bildschirmsitzung wird nicht ausgeführt. Kannst du mir bitte helfen? Vielen Dank für die Antworten.

Mato
quelle
Fügen Sie #! / Bin / bash -x
rjt
Danke, aber ich habe es oben im Skript hinzugefügt, aber die Änderung besteht nur darin, dass es das Skript in die Konsole schreibt: + SESSION_NAME = session1 + COMMAND = 'python /opt/aaa/manage.py runserver 192.168.1.1:4300 '
Mato
Hast du versucht /usr/bin/screenund /usr/bin/python(oder wo immer diese ausführbaren Dateien sind)?
Nickie
@nickie danke, aber es ist das gleiche, es funktioniert nicht ...
Mato

Antworten:

0

Die Probleme mit Diensten sind Benutzer und tty.

Eine andere Möglichkeit, den Bildschirm beim Booten laufen zu lassen, besteht darin, dass sich der Benutzer automatisch anmeldet und dann den Bildschirm mit einer vorkonfigurierten Reihe von Fenstern und Befehlen in '~ / .screenrc' startet.

Verbinden Sie sich bei der Anmeldung erneut mit diesem Bildschirm.

rjt
quelle
Danke, kannst du mir bitte ein Beispiel mit edit screenrc für meinen Fall geben?
Mato
0

Der einzige Grund, warum ich sehe, dass Ihr Bildschirm nicht startet, ist ein Fehler im Python-Befehl. Um das Problem zu identifizieren, kann der Skriptbefehl hilfreich sein. Die Ausgabe wird in eine Protokolldatei geschrieben, die Sie lesen können.

Hier ist eine verbesserte Version des Skripts mit den Informationen, die ich normalerweise in meinen Skripts hinzufüge:

#!/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
Maxime Biette
quelle
Danke, aber es wurde kein session1.log erstellt ... :-(
Mato
Nur Brainstorming: 1 / Hast du scriptinstalliert? 2 / Wenn Sie den genauen Python-Befehl eingeben, den Sie in Ihrem Startskript haben, wird er korrekt ausgeführt? 3 / Haben Sie den Text "session1 started" gedruckt, wenn Sie den Befehl verwenden?
Maxime Biette
0

Ich denke, das Problem liegt bei Ihrer $COMMANDVariablen. Der Befehlsname sollte die pythonausführbare Datei sein, der Rest sind Argumente. Wenn Sie es jedoch in Anführungszeichen setzen, screendenken Sie, dass der Name des Befehls die gesamte Zeichenfolge ist, und suchen Sie nach einer ausführbaren Datei mit diesem Namen.

Versuche dies:

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"
        ;;
    ...

dh ohne die umgebenden Anführungszeichen $COMMANDund ohne die (unnötige) $ARGUMENTSVariable. Das sollte funktionieren.

Nickie
quelle
0

Schließlich habe ich dieses Skript verwendet, aber den Befehl für ein neues Fenster entfernt - Wie kann ich ein neues Fenster in derselben Bildschirmsitzung automatisch starten?

Mato
quelle
Dies ist keine Antwort - ich weiß nicht, was es ist. Wenn es sich um eine Folgefrage handelt und dies zunächst Ihre Frage ist, warum bearbeiten Sie Ihre ursprüngliche Frage nicht? Haben Sie außerdem die bisher gegebenen Antworten ausprobiert? Arbeiten sie für Sie oder scheitern sie?
Nickie
Ursprünglich hatte ich gedacht, dass ich es anders mache - als ein Bildschirm mit Fenstern. Aber nachdem ich beschlossen hatte, es mit getrennten Sitzungen zu tun. Ich habe mein Skript erstellt, das funktioniert nicht. Aber die Antworten, die hier gepostet wurden, haben mir nicht geholfen, also habe ich versucht, das Skript von meiner letzten Frage zu modifizieren. Jetzt funktioniert es richtig.
Mato