Wie kann ich einen lange laufenden Hintergrundprozess über SSH starten und die Verbindung sofort trennen?

Wie kann ich einen lange laufenden Hintergrundprozess über SSH starten und die Verbindung sofort trennen?

Ich möchte ein Bash-Skript schreiben, das sich per SSH mit einem Server verbinden, einen kontinuierlichen Hintergrundprozess (unendliches Python-Skript) starten und den Server beenden kann. Folgendes habe ich versucht:

ssh user@domain "python3 script.py &"

ssh user@domain "python3 script.py & exit"

ssh user@domain "nohup python3 script.py & exit"

Keiner von ihnen funktioniert. Das Skript wird erfolgreich gestartet, aber ich kann den Server nicht verlassen und es bleibt angemeldet.

Antwort1

Der nohupBefehl macht nicht das, was Sie denken – er ignoriert ein Auflegesignal, sodass die (Terminal-)Verbindungen auf STDIO getrennt werden können, ohne dass der Terminaltreiber etwas SIGHUPan die angeschlossenen Prozesse sendet, nohupschließt aber seine eigenen STDIO-Verbindungen nicht und gibt sie tatsächlich an den Prozess weiter, den er startet, und sshdwartet daher, bis der Prozess beendet wird und diese Deskriptoren infolgedessen geschlossen werden.

Sie müssen also sicherstellen, dass der von Ihnen gestartete Prozess auch nicht mit den ihm von gegebenen STDOUT- und STDERR-Deskriptoren verbunden ist sshd(STDIN ist bereits auf geöffnet /dev/null), und Sie können dies tun, indem Sie sie umleiten (entweder in eine Datei oder auf /dev/null). Der nohupBefehl ist nicht unbedingt erforderlich, da nichts gesendet wird, SIGHUPwenn die SSH-Verbindung abbricht.

Versuche dies:

ssh user@domain "python3 script >/dev/null 2>&1 &"

Antwort2

Versuchen Sie es mit einem Terminal-Multiplexer. tmux ist großartig. Normalerweise gebe ich nicht gerne Ratschläge, bei denen Sie möglicherweise etwas installieren müssen, aber tmux ist eine wirklich praktische App, die Sie in Ihrem Werkzeugkasten haben sollten. (ist möglicherweise bereits installiert)

Sie können Ihre in tmux verpackte App starten, die Verbindung trennen, Ihren Laptop schließen, woanders hingehen, sich erneut anmelden und die Verbindung zu Ihrer Sitzung, die noch in tmux läuft, wiederherstellen. Wenn Ihr Betriebssystem älter ist, funktioniert screen ähnlich, aber ich bevorzuge tmux.

Sie können eine neue App über die Befehlszeile oder eine App mit folgendem Format starten

tmux neue Sitzung "Befehl1"

tmux new-session "ping 8.8.8.8"

Aber Sie sollten Ihren Sitzungen wahrscheinlich Namen geben. Jetzt wird eine neue Sitzung mit dem Namen muxping im Hintergrund gestartet. Das -d ist getrennt.

tmux new -d -s muxping "ping 8.8.8.8"

jetzt im Hintergrund zeigen

tmux ls

daran anhängen

tmux a

Darüber hinaus können Sie den Bildschirm teilen und viele sehr praktische Dinge in tmux tun. Es gibt viele Websites mit tmux-Spickzetteln, die die große Manpage vereinfachen. Der Einstieg ist ziemlich einfach.

verwandte Informationen