it-swarm.com.de

Lassen Sie Prozesse laufen, nachdem die SSH-Sitzung getrennt wurde

Ich habe manchmal lange laufende Prozesse, die ich starten möchte, bevor ich nach Hause gehe, also erstelle ich eine SSH-Sitzung auf dem Server, um den Prozess zu starten, aber dann möchte ich meinen Laptop schließen und nach Hause gehen und später, nach dem Abendessen, möchte ich Überprüfen Sie den Prozess, den ich gestartet habe, bevor Sie die Arbeit verlassen. Wie kann ich das mit SSH machen? Ich verstehe, dass wenn Sie Ihre SSH-Verbindung unterbrechen, auch Ihre Anmeldesitzung auf dem Server unterbrochen wird, wodurch der lange laufende Prozess abgebrochen wird.

216

Verwenden Sie Nohup, damit Ihr Prozess das Auflegesignal ignoriert:

$ Nohup long-running-process &
$ exit
217
Warren Young

Sie möchten GNU Screen. Es ist super genial!

ssh [email protected]
screen               #start a screen session
run-a-long-process

CTRL+a , d von Ihrer Bildschirmsitzung zu entfernen

exit                 #disconnect from the server, while run-a-long-process continues

Wenn Sie zu Ihrem Laptop zurückkehren:

ssh [email protected]
screen -r            #resume the screen session

Dann überprüfen Sie den Fortschritt Ihres langjährigen Prozesses!

screen ist ein sehr umfassendes Tool und kann viel mehr als das, was ich beschrieben habe. Versuchen Sie in einer Bildschirmsitzung Strg + a? um ein paar allgemeine Befehle zu lernen. Am häufigsten sind wahrscheinlich:

  • CTRL+a , c um ein neues Fenster zu erstellen
  • CTRL+a , n um zum nächsten Fenster in Ihrer Bildschirmsitzung zu wechseln
  • CTRL+a , p um zum vorherigen Fenster in Ihrer Bildschirmsitzung zu wechseln
  • wenn Sie sich von einer Reihe verschiedener Systeme aus anmelden, haben Sie sich möglicherweise versehentlich an eine aktive Bildschirmsitzung auf einem anderen Computer angeschlossen. Aus diesem Grund setze ich immer mit screen -d -r fort, um sicherzustellen, dass eine andere Shell, die an meine Bildschirmsitzung angehängt ist, getrennt wird, bevor ich sie auf meinem aktuellen System wieder aufnehme.
143
Sandy

Wenn Sie nicht im Voraus geplant und screen usw. eingerichtet haben, gehen Sie wie folgt vor:

  1. Wenn Ihr Prozess im Hintergrund ausgeführt wird: gehe zu # 3, sonst: Ctrl-Z, um den Vordergrundprozess anzuhalten. Dadurch wird die Jobnummer des angehaltenen Prozesses gemeldet, zum Beispiel:

    [1]+  Stopped                 processName
    
  2. Senden Sie processName mit bg %1 (mit was auch immer der Job # folgt %). Dadurch wird processName im Hintergrund fortgesetzt.

  3. DisownprocessName mit disown %1 oder disown PID. Verwenden Sie die -h Flag, wenn Sie den Besitz behalten möchten, bis Sie Ihre aktuelle Shell beenden.

42
Mike Covington

Was Sie verwenden möchten, ist Bildschirm oder noch besser ein benutzerfreundlicher Wrapper um den Bildschirm namens byobu.

Mit dem Bildschirm können Sie mehrere virtuelle Terminalsitzungen in derselben SSH-Sitzung ausführen. A Tutorial und Hilfeseiten sind verfügbar.

byob ist ein Wrapper, mit dem neue Bildschirme einfach mit einer einfachen Funktionstaste anstelle einer Tastenkombination von Strg-A geöffnet werden können. Außerdem wird eine Statuszeile mit allen offenen virtuellen Terminals angezeigt, die benannt werden können.

Eine weitere nette Funktion ist die Tatsache, dass Ihr gesamter Bildschirm geöffnet bleiben kann, während Ihre SSH-Verbindung getrennt wird. Sie verbinden sich einfach wieder über ssh und rufen byobu an und alles ist wie vorher.

Endlich einige Screenshots von Byobu.

15
txwikinger

Es könnte erwähnenswert sein, dass

ssh -t lala screen -rxU moo wird an die moo Sitzung auf Host lala angehängt

ssh -t lala screen -S moo erstellt die moo Sitzung auf Host lala

und

ssh -t lala screen -S moo quux erstellt die Sitzung moo auf Host lala und führt das Programm quux aus, wobei die Sitzung nach Abschluss beendet wird.

9
cjac

Eine gute Anleitung finden Sie hier: Lassen Sie Ihre SSH-Sitzung laufen, wenn Sie die Verbindung trennen

Sudo apt-get install screen

Jetzt können Sie eine neue Bildschirmsitzung starten, indem Sie einfach den Bildschirm in die Befehlszeile eingeben. Es werden einige Informationen zum Bildschirm angezeigt. Drücken Sie die Eingabetaste und Sie befinden sich an einer normalen Eingabeaufforderung.

Um die Verbindung zu trennen (aber die Sitzung laufen zu lassen) Drücken Sie Ctrl + A und dann Ctrl + D in unmittelbarer Folge. Sie sehen die Nachricht [getrennt]

So stellen Sie die Verbindung zu einer bereits laufenden Sitzung wieder her

screen -r

Zum erneuten Verbinden mit einer vorhandenen Sitzung oder zum Erstellen einer neuen Sitzung, falls keine vorhanden ist

screen -D -r

Um ein neues Fenster innerhalb einer laufenden Bildschirmsitzung zu erstellen Hit Ctrl + A und dann C in unmittelbarer Folge. Sie sehen eine neue Eingabeaufforderung.

Um von einem Bildschirmfenster zu einem anderen zu wechseln Hit Ctrl + A und dann Ctrl + A in unmittelbarer Folge.

Zum Auflisten von geöffneten Bildschirmfenstern Hit Ctrl + A und dann W in unmittelbarer Folge

Alte Frage, seltsam, noch hat niemand geraten tmux , die als Wrapper für n Konsolen fungiert und sie offen hält, bis sie gebraucht werden. Dies ermöglicht neben einer Reihe von Funktionen, die tmux hat, mehr Kontrolle. Es ist einfach zu verwalten, Sie führen einfach tmux aus, wodurch Sie in die Shell gelangen, starten Ihren langen Job und drücken dann Strg + b, gefolgt von d (Trennen) (ctrl+b ist das "ok google" von tmux und d ist der Befehl zum Schließen, ohne die Shell zu verlassen. Dies funktioniert tatsächlich, wenn Sie beispielsweise PuTTY schließen. Wenn Sie nach dem Abendessen erneut eine Verbindung herstellen, können Sie tmux mit tmux attach, um Ihren Bildschirm genau so zu sehen, wie Sie ihn verlassen haben. Etwas, das ich liebe, ist das Teilen des Fensters: ctrl+b und drücken Sie dann ". Um von einem Bereich zum anderen zu wechseln, ctrl+b und drücken Sie dann den Aufwärts-/Abwärtspfeil.

4
nnsense

Ich benutze NX NoMachine, das für mich kostenlos ist, weil es nur ich bin. Im Wesentlichen wird eine X-Sitzung auf dem Server ausgeführt, mit der Sie immer wieder eine Verbindung herstellen und die Verbindung trennen können. Die X-Sitzung wird fortgesetzt, wenn Sie nicht verbunden sind. Verbindungen können von überall hergestellt werden. Sie können zwischen schwebenden Fenstern oder einem einzelnen Fenster mit einem gesamten Desktop (z. B. einem vollständigen Gnome-Desktop) wählen. Der Client (den Sie auf Ihrem Laptop ausführen würden) kann unter Linux, MacOS, Solaris oder Microsoft Windows ausgeführt werden. Im letzteren Fall werden schwebende Fenster einzeln in der Windows-Taskleiste angezeigt, wenn Sie sie auswählen.

Ich verwende meinen Windows XP Laptop (den ich für bestimmte Windows-spezifische Hardware benötige) als Frontend für meine beiden Linux-Server mit NX Nomachine. Ich kann sogar auf dem angeschlossenen Drucker drucken mein Windows Laptop von Linux.

2

Tmux ist eine gute Option, um Ihre lang laufenden Prozesse im Hintergrund auszuführen.

Ich muss die lang laufenden Prozesse auf der VM Instanz/dem Server (mit Betriebssystem: Ubuntu 16.0)) einer Google Cloud-Plattform weiter ausführen. Wo ich das SSH-Terminal starten muss und vom Terminal aus Jetzt ist alles in Ordnung. Aber warten Sie, wenn die Verbindung mit meinem SSH-Terminal beendet ist, dann werden die lang laufenden Prozesse sofort gestoppt und ich muss sie erneut ausführen Das SSH-Terminal wird neu gestartet oder von einem neuen SSH-Terminal aus.

Ich finde, dass tmux die gute Lösung ist, um die Beendigung von Prozessen zu vermeiden, die wir auch nach dem Schließen des Terminals ausführen möchten.

Terminal-Multiplexer (tmux) zum Starten der tmux -Sitzung:

  1. Starten Sie das SSH-Terminal
  2. Geben Sie tmux ein. Es öffnet sich ein Fenster im selben Terminal.
  3. Führen Sie den Befehl aus, um lang laufende Prozesse in der tmux-Sitzung zu starten.

Selbst wenn das SSH-Terminal plötzlich geschlossen/beendet wird, führt die tmux-Sitzung die gestarteten lang laufenden Prozesse auf der Instanz/dem Server weiter aus.

Wenn die Verbindung beendet wurde, wie kann die Verbindung wiederhergestellt werden, um die in der tmux-Sitzung ausgeführten Prozesse im Hintergrund anzuzeigen:

  1. neues SSH-Terminal wieder anschließen oder öffnen. Geben Sie den Befehl tmux attach Ein, um diesen Prozess anzuzeigen (der im Hintergrund ausgeführt wird).

Möchten Sie die tmux-Sitzung beenden:

  1. Stoppen Sie den Prozess. Geben Sie dann exit in das tmux-terminal-Fenster ein.

(Beachten Sie Folgendes: Wenn wir den Befehl tmux detach Verwenden, wird das Fenster/Terminal der tmux-Sitzung beendet, ohne die tmux-Sitzungen zu beenden/zu stoppen.)

Weitere Informationen finden Sie im folgenden Artikel:

  1. https://www.tecmint.com/keep-remote-ssh-sessions-running-after-disconnection/
  2. https://limitlessdatascience.wordpress.com/2019/08/22/tmux-to-keep-jupyter-notebook-running-in-the-background/
1
Yogesh