GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Verhindern, dass der Gnu-Bildschirm die Sitzung beendet, sobald das ausgeführte Skript endet?

Ich versuche, den GNU-Bildschirm zu zwingen, ein „virtuelles“ Terminal zu erstellen, ohne daran anzuhängen, das Skript darin 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 funktionierte. Entweder erhalte ich eine Sitzung ohne ausgeführtes Skript, das Skript wird ausgeführt, aber die Sitzung wird beendet, sobald sie beendet ist, oder ich erhalte die Fehlermeldung „Keine Bildschirmsitzung gefunden“.

Was ich im Grunde versuche, ist, einen in PHP geschriebenen UDP-Listener auszuführen und ihn in einer Endlosschleife zum Laufen zu bringen (hören nicht unterbrechen). Ja – ich könnte ein PHP-Skript mit & ausführen am Ende, wodurch die PHP-CLI gezwungen wird, als Daemon ausgeführt zu werden. Das Problem ist, dass ich ein Stück Müll namens Server verwende (QNAP – niemals, niemals diesen Müll kaufen!), der dies anscheinend ignoriert. Sobald ich mich von der SSH-Sitzung abmelde, stoppt das Skript.

Also screen scheint die einzige Möglichkeit zu sein. Aber ich kann nicht verstehen, warum die Sitzung beendet wird, sobald der ausgeführte Befehl oder das Skript endet?

BEARBEITEN :Ich habe auch versucht, ein Beispiel aus dem Internet zu finden:

screen -dmS name
screen -S name -p windowname -X stuff 'mc
'

Kein Mangel! Nach dem Anhängen (screen -R name ) Ich sehe, dass Midnight Commander NICHT hingerichtet wurde. Obwohl der Beispielautor sagte, dass es so sein wird.

Akzeptierte Antwort:

Um den Bildschirm nach Abschluss des Skripts beschäftigt zu halten, lassen Sie einfach etwas Dauerhaftes in einem Fenster laufen. Die einfachste Wahl für dieses „Etwas“ ist wahrscheinlich eine interaktive Shell. Hier ist eine Möglichkeit, dies zu tun (vorausgesetzt, bash als Wahl der interaktiven Shell):

screen -dmS session_name sh -c '/share/Sys/autorun/start_udp_listeners.sh; exec bash'
  • -dm :Startbildschirm im getrennten Modus
  • -S :Legt den Sitzungsnamen für den Bildschirm fest, um ihn später leichter wiederzufinden
  • sh -c '...' :Anstatt einfach Ihr Skript auszuführen, das beendet wird, verwenden Sie sh -c um mehrere Befehle auszuführen
  • exec bash :Nachdem das Skript beendet ist, wird der sh von oben wechselt zu einer interaktiven Shell (bash ), die niemals beendet werden sollte, bis sie durch etwas Externes beendet wird. Dadurch bleibt screen erhalten solange öffnen wie die bash Instanz lebt.

Linux
  1. Verhindern Sie, dass ssh Shell-Skriptparameter auflöst

  2. Wie erzwinge ich das Trennen von Screen von einer anderen SSH-Sitzung?

  3. Wie verhindere ich, dass Ubuntu meinen Monitor in den Ruhezustand versetzt?

  4. Bildschirmsitzung umbenennen

  5. Wie konfiguriere ich D-Bus und SSH X-Forwarding, um zu verhindern, dass SSH beim Beenden hängen bleibt?

So verwenden Sie den GNU-Bildschirm zum Verwalten von Terminalsitzungen in Linux

GAST-Sitzung vom Ubuntu-Anmeldebildschirm entfernen

Wie entsperre ich den Bildschirm vom Skript in KDE Plasma 5?

GNU-Bildschirmanzeige + von Putty

Verhindern, dass der VRRP-Master zum Master wird, nachdem er fehlgeschlagen ist

Verhindern, dass die Konsole den Bildschirm löscht?