Ich versuche, den GNU-Bildschirm zu zwingen, ein "virtuelles" Terminal zu erstellen, ohne es anzuhängen, ein Skript im Inneren auszuführen und die Sitzung NICHT zu beenden, sobald das Skript endet.
Ich habe viele Kombinationen ausprobiert, darunter:
screen -dmS udplistener /share/Sys/autorun/start_udp_listeners.sh
oder
screen -S udplistener -X /share/Sys/autorun/start_udp_listeners.sh
und keiner von ihnen arbeitete. Entweder erhalte ich eine Sitzung ohne ausgeführtes Skript, das Skript wird jedoch beendet, sobald die Sitzung beendet ist, oder es wird der Fehler "Keine Bildschirmsitzung gefunden" angezeigt.
Ich versuche im Grunde, den in PHP geschriebenen UDP-Listener auszuführen und ihn in einer Endlosschleife zum Laufen zu bringen (keine Unterbrechungen beim Hören). Ja - ich könnte &
am Ende PHP-Skript mit ausführen , wodurch PHP CLI gezwungen wird, als Daemon zu laufen. Das Problem ist, dass ich einen Müll namens Server verwende (QNAP - kaufe niemals diesen Müll!), Der das zu ignorieren scheint. Sobald ich mich von der SSH-Sitzung abmelde, werden die Skripte gestoppt.
So screen
scheint die einzige Möglichkeit zu sein. Aber ich kann nicht verstehen, warum es die Sitzung beendet, sobald der ausgeführte Befehl oder das Skript beendet ist.
EDIT : Ich habe auch versucht, Beispiel im Internet zu finden:
screen -dmS name
screen -S name -p windowname -X stuff 'mc
'
Kein Mangel! Nachdem screen -R name
ich es angehängt habe ( ), sehe ich, dass Midnight Commander NICHT hingerichtet wurde. Obwohl Beispielautor sagte, wird es sein.
quelle
screen
, erstellen Sie nur ein Fenster, um einen einzelnen Befehl auszuführen. Wenn der Befehl beendet wird, wird das Fenster geschlossen undscreen
hat nichts mehr zu tun, sodass es beendet wird.screen
des Schließens? Übrigens: Ich verstehe die Idee immer noch nicht! Wenn ich anrufescreen -dmS name
, erstelle ich ein freistehendes Fenster, das auch nichts mehr zu tun hat. Es wird aber nicht automatisch geschlossen! Wenn ich jedoch etwas in diesem getrennten Bildschirm ausführen möchte, wird es beendet, sobald die Ausführung abgeschlossen ist. Warum? Ich sehe hier keine Logik. Kann es sein, dass Fenster nichts tut, aber kann es nicht sein, dass Fenster etwas tut und dann nichts tut?&
am Ende), werden sie aufgrund des fehlerhaften Servers (QNAP) beendet, wenn die Sitzung endet (mir wurde gesagt, sie sollten nicht unter normalem Linux ausgeführt werden, wenn sie mit ausgeführt werden&
). Daher möchte ich nachstart_udp_listeners.sh
Abschluss der Sitzung nichts weiter tun , als zu verhindern, dass die Sitzung beendet wird. Solange das nicht der Fall ist, funktionieren meine PHP-Listener einwandfrei.Antworten:
Um den Bildschirm nach Abschluss des Skripts weiterhin zu beschäftigen, lassen Sie einfach etwas Beständiges in einem Fenster laufen. Die einfachste Wahl für dieses "Etwas" ist wahrscheinlich eine interaktive Shell. Hier ist eine Möglichkeit, dies zu tun
bash
:-dm
: Startet den Bildschirm im getrennten Modus-S
: Setzt den Sitzungsnamen für den Bildschirm, um ihn später leichter abrufen zu könnensh -c '...'
: Anstatt einfach Ihr Skriptsh -c
auszuführen , das beendet wird, verwenden Sie , um mehrere Befehle auszuführenexec bash
: Nach dem Beenden des Skripts wechselt dassh
von oben auf eine interaktive Shell (bash
), die niemals beendet werden sollte, bis sie von etwas Externem beendet wird. Dies bleibtscreen
so lange geöffnet, wie diebash
Instanz aktiv ist.quelle
export IGNOREEOF=1
, um eine versehentliche Kündigung mit Strg + D zu verhindern. Das sollte mir die perfekte Lösung bieten. Ich habe den ganzen langen Abend gesucht. VIELEN DANK! :]bash -c
allerdings benutzt.screen -LS sauf bash -c "sudo aptitude update && sudo aptitude full-upgrade; exec bash"
Ich hatte kein Glück mit
sh -c
meinem Himbeer-Pi 2, auf dem Debian 7.8 läuft. Aberbash -c
hat der Job gemacht:Befehl:
quelle
bash
undsh
scheint zwei verschiedene Schalen zu sein. Das ist alles, denke ich, aber ich kann mich irren, da ich überhaupt ein Linux-Neuling bin.sh -c
aufbash -c
den Trick tat. Ich verstehe nicht warum, beidesh
undbash
sind installiert, daher verliere ich immer noch den Schlaf, aber zumindest funktioniert es.sh
zeigt wahrscheinlich auf/bin/dash
statt/bin/bash
. Debian hat die Standard-Shell vonbash
vordash
ein paar Jahren geändert.