Lassen Sie SSH-Sitzungen nach dem Trennen der Verbindung weiterlaufen

208

Ich habe manchmal lange laufende Prozesse, die ich starten möchte, bevor ich nach Hause gehe. Daher erstelle ich eine SSH-Sitzung für den Server, um den Prozess zu starten. Dann möchte ich meinen Laptop schließen und nach Hause gehen. Nach dem Abendessen möchte ich das Überprüfen Sie den Prozess, den ich gestartet habe, bevor Sie die Arbeit verlassen. Wie kann ich das mit SSH machen? Wenn Sie Ihre SSH-Verbindung unterbrechen, wird nach meinem Verständnis auch die Anmeldesitzung auf dem Server unterbrochen, wodurch der lang andauernde Prozess abgebrochen wird.

λ Jonas Gorauskas
quelle

Antworten:

205

Verwenden nohupSie diese Option, damit Ihr Prozess das Aufhängesignal ignoriert:

$ nohup long-running-process &
$ exit
Warren Young
quelle
20
Das ist es. Keine Notwendigkeit, Bildschirm oder tmux zu installieren. Dies ist eigentlich die gute alte Methode, um es zu tun. Sicher, 'screen' oder 'tmux' sind beide wunderbare Apps und sollten bei Bedarf verwendet werden, aber so einfach wie das Ausführen eines Prozesses im Hintergrund, von dem Sie sich abmelden können, gehen Sie wie oben beschrieben vor.
Reiche
2
ist Nohup wie verleugnet?
cjac
28
Sie haben ähnliche Ziele, unterscheiden sich jedoch in vielerlei Hinsicht. nohupfängt SIGHUP ab, damit long-running-processes nicht stirbt , wenn die Shell, die es ausgeführt hat, beendet wird und SIGHUP an alle noch laufenden Kinder sendet . disownEntfernt einfach den angegebenen Job aus der untergeordneten Liste von Bash, damit er überhaupt nicht versucht, SIGHUP zu senden. nohupist ein Programm, das von der Shell getrennt ist, daher funktioniert es mit allen Shells, wohingegen disownes sich um ein in Bash integriertes Programm handelt. nohupAkzeptiert den auszuführenden Befehl, disownfunktioniert jedoch erst, nachdem der Job gestartet und im Hintergrund ausgeführt wurde, sodass Sie zur Shell zurückkehren können.
Warren Young
3
Super schnelle Überprüfung für diejenigen, die mit Nohup und Disown nicht vertraut sind - sowie einige einfache Möglichkeiten, mit Terminalsitzungen umzugehen serverwatch.com/tutorials/article.php/3935306/…
Dan
7
tail -f nohup.outum zu überprüfen, was los ist, wenn du zurück bist.
Ricardo Stuven
141

Sie möchten GNU Screen verwenden. Es ist super toll!

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

CTRL+ a, dum sich von Ihrer Bildschirmsitzung zu lösen

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 prüfen Sie den Fortschritt Ihres langjährigen Prozesses!

screenist ein sehr umfassendes Tool und kann viel mehr als das, was ich beschrieben habe. Versuchen Sie in einer Bildschirmsitzung die Tastenkombination Strg + a? um ein paar gebräuchliche Befehle zu lernen. Die wahrscheinlich häufigsten sind:

  • CTRL+ a, cum ein neues Fenster zu erstellen
  • CTRL+ a, num zum nächsten Fenster in Ihrer Bildschirmsitzung zu wechseln
  • CTRL+ a, pum zum vorherigen Fenster Ihrer Bildschirmsitzung zu wechseln
  • Wenn Sie sich von verschiedenen Systemen aus anmelden, haben Sie möglicherweise versehentlich eine Verbindung zu einer aktiven Bildschirmsitzung auf einem anderen Computer hergestellt. Aus diesem Grund setze ich immer mit fort, screen -d -rum sicherzustellen, dass eine andere Shell, die an meine Bildschirmsitzung angehängt ist, getrennt wird, bevor ich sie auf meinem aktuellen System wieder aufnehme.
Sandig
quelle
8
tmux ist ein modernes Analogon des Bildschirms.
zvolkov
Ich kenne mich nicht mit modernen Schlüsseln aus, aber das Standard-Schlüsselpräfix von tmux (Strg + B) hilft, wenn Sie es gewohnt sind, Schlüssel mit einem Bash / Emacs-Befehl zu versehen.
Sajith
2
Bildschirm ist ziemlich cool, wenn Sie aus irgendeinem Grund ein freigegebenes Terminal möchten. Erstelle einen Bildschirm screen -S nameund lass deinen anderen Freund eine Verbindung herstellen screen -x name.
Patrick
1
tmuxMit tmuxinatorist eine großartige Kombination für ausgefallene Setups, während ich screeneine schnelle und einfache Lösung bevorzuge .
EarthMeLon
Diese Antwort ist die beste. Ich mag es. Ausgezeichnete Forschung
Jaffer Wilson
42

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

  1. Wenn Ihr Prozess im Hintergrund ausgeführt wird: Gehen Sie zu # 3, andernfalls: Ctrl-ZUnterbrechen Sie den Vordergrundprozess. Hiermit wird die Job-Nr. Des angehaltenen Prozesses gemeldet, zum Beispiel:

    [1]+  Stopped                 processName
    
  2. Senden Sie processNamein den Hintergrund mit bg %1(unter Verwendung der Job-Nr., Die der folgt %). Dies wird processNameim Hintergrund fortgesetzt.

  3. Ablehnung processName mit disown %1oder disown PID. Verwenden Sie das -hFlag, wenn Sie den Besitz beibehalten möchten, bis Sie Ihre aktuelle Shell beenden.

Mike Covington
quelle
5
Danke dafür! Ich hatte einen Job am Laufen und dachte, ich könnte ihn nicht am Laufen halten, weil ich ihn nicht benutzt hatte, &als ich ihn angefangen hatte. Das scheint großartig zu funktionieren!
Matt
4
Das ist großartig! Ich hätte nie gedacht, dass Sie mit Linux die Kontrolle über solche aktiven Prozesse übertragen können. Ich hatte Angst, dass mein Akku während eines langen Prozesses beim Einspielen von SSH in meinen Server leer werden könnte, und das war die Antwort für mich!
Pluto
14

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

Auf dem Bildschirm können Sie mehrere virtuelle Terminalsitzungen in derselben SSH-Sitzung ausführen. Ein Tutorial und Hilfeseiten stehen zur Verfügung.

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

Ein weiteres nettes Feature ist die Tatsache, dass Ihr gesamter Bildschirm eingeschaltet bleiben kann, während Ihre SSH-Verbindung getrennt ist. Du verbindest dich einfach wieder per ssh und rufst byobu an und alles ist wie vorher.

Endlich ein paar Screenshots von byobu.

txwikinger
quelle
Ich habe einen Prozess auf meinem Server in Byobu Terminal gestartet, ohne wirklich zu wissen, um was es sich handelt (ich habe gerade in Terminal gesucht und auf Byobu geklickt, weil ich ihn noch nie zuvor gesehen hatte). Ich habe Byobu weiter verwendet, weil es unten eine farbenfrohe Statusleiste hatte und ich fand es cool. Heute wollte ich über SSH remote auf diese Terminalsitzung zugreifen. Ich musste nur "byobu" eingeben und es wurde sofort die Terminalsitzung angezeigt. Wirklich glücklich, dass ich über Byobu gestolpert bin!
Nick
8

Es könnte erwähnenswert sein

ssh -t lala screen -rxU moowird an die moo session auf host lala angehängt

ssh -t lala screen -S mooerstellt die MOO- Sitzung auf Host Lala

und

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

cjac
quelle
3

Alte Frage, seltsam, noch hat niemand tmux geraten , das als Hülle für n Konsolen fungiert und sie offen hält, bis sie gebraucht werden. Dies ermöglicht mehr Kontrolle neben einer Reihe von Funktionen, die tmux hat. Es ist einfach zu verwalten, Sie führen einfach tmux aus, was Sie in die Shell bringt, starten Ihren langen Job, drücken dann Strg + b, gefolgt von d (trennen) ( ctrl+bist das "ok google" von tmux und dder Befehl zum Schließen ohne Austritt aus der Schale). Dies funktioniert tatsächlich, wenn Sie beispielsweise Putty gerade schließen. Wenn Sie sich nach dem Abendessen wieder verbinden, können Sie tmux mit erneut öffnen tmux attach, um Ihren Bildschirm genau so zu sehen, wie Sie ihn verlassen haben. Etwas, das ich liebe, ist das Teilen von Fenstern: ctrl+bund dann drücken ". So wechseln Sie von einem Bereich in einen anderen: ctrl+bDrücken Sie anschließend auf den Aufwärts- / Abwärtspfeil.

Unsinn
quelle
3

Eine gute Anleitung finden Sie hier: Lassen Sie Ihre SSH-Sitzung beim Trennen der Verbindung weiterlaufen

sudo apt-get install screen

Jetzt können Sie eine neue Bildschirmsitzung starten, indem Sie einfach screen in die Befehlszeile eingeben. Ihnen werden einige Informationen zum Bildschirm angezeigt. Drücken Sie die Eingabetaste, und Sie erhalten eine normale Eingabeaufforderung.

Um die Verbindung zu trennen (aber die Sitzung laufen zu lassen), drücken Sie Ctrl+ Aund dann Ctrl+ Dunmittelbar nacheinander. Sie sehen die Nachricht [getrennt]

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

screen -r

Zum erneuten Herstellen einer Verbindung zu 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, drücken Sie Ctrl+ Aund dann Csofort nacheinander. Sie sehen eine neue Eingabeaufforderung.

Um von einem Bildschirmfenster zu einem anderen zu wechseln, drücken Sie Ctrl+ Aund dann Ctrl+ Aunmittelbar hintereinander.

Zum Auflisten der geöffneten Bildschirmfenster drücken Sie Ctrl+ Aund dann Wsofort nacheinander

Victor Hugo Arango A.
quelle
Mit können Sie <kbd>Ctrl</kbd>die Namen als Tastaturtasten anzeigen.
Tomasz
1

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 läuft weiter, wenn Sie nicht verbunden sind. Verbindungen können von überall hergestellt werden. Sie können zwischen schwebenden Fenstern oder einem einzelnen Fenster wählen, das einen gesamten Desktop enthält (z. B. einen vollständigen Gnome-Desktop). 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 in der Windows-Taskleiste einzeln angezeigt.

Ich verwende meinen Windows XP-Laptop (den ich für bestimmte Windows-spezifische Hardware benötige) als Front-End für meine beiden Linux-Server mit NX Nomachine. Ich kann sogar von Linux aus auf dem Drucker drucken, der an meinen Windows-Laptop angeschlossen ist.

Rob_before_edits
quelle