Website-Suche

Einen Befehl weiter ausführen, nachdem Sie sich von der SSH-Sitzung abgemeldet haben


Angenommen, Sie greifen über SSH auf ein entferntes System zu. Sie möchten einen Befehl ausführen, der lange dauern wird, und dann die SSH-Sitzung beenden, aber den Befehl weiterlaufen lassen, selbst wenn Sie nicht mehr mit dem entfernten System verbunden sind. Wie machen Sie das? Wie Sie vielleicht wissen, werden beim Beenden der SSH-Sitzung alle laufenden Aufgaben beendet. Würden Sie den Auftrag von vorne beginnen? Das müssen Sie nicht. Hier habe ich 4 Methoden aufgeführt, um einen Befehl nach dem Abmelden von der SSH-Sitzung unter Linux weiterlaufen zu lassen.

Einen Befehl nach dem Abmelden der SSH-Sitzung in Linux weiterlaufen lassen

Es könnte viele Möglichkeiten geben, dies zu tun. Ich finde jedoch, dass die folgenden Methoden einfach und unkompliziert sind.

Methode 1 - Verwendung des Bildschirms

Das screen-Werkzeug, ein Vollbild-Fenstermanager mit VT100/ANSI-Terminalemulation, ermöglicht es Ihnen, sich sicher von der SSH-Sitzung zu trennen, ohne den entfernten Auftrag zu beenden. Es wird für diejenigen hilfreich sein, die mit mehreren entfernten Servern arbeiten. Der Screen-Befehl ist in den meisten Linux-Betriebssystemen vorinstalliert. Für den Fall, dass er nicht installiert ist, können Sie ihn mit dem Paketmanager Ihrer Distribution installieren.

Bei Arch Linux und Abkömmlingen:

$ sudo pacman -S screen

Auf RHEL, CentOS und anderen RPM-basierten Systemen:

$ sudo yum install screen

Auf Debian, Ubuntu und anderen DEB-basierten Systemen:

$ sudo apt-get install screen

Auf SUSE/OpenSUSE:

$ sudo zypper install screen

Nachdem Sie Screen auf Ihren Remote-Systemen installiert haben, starten Sie die Screen-Sitzung:

$ screen

Die Screen-Sitzung wurde jetzt gestartet. Führen Sie nun den Job oder die Aufgabe aus, die Sie auf Ihrem entfernten System erledigen wollten.

Ich werde das Ubuntu 16.04-Image herunterladen:

$ wget http://mirror.waia.asn.au/ubuntu-releases/xenial/ubuntu-16.04.2-desktop-amd64.iso

Die Ubuntu 16.04 ISO ist ungefähr 1,5 GB groß. Der Download dauert bei einer normalen Breitbandverbindung fast eine Stunde. Sie müssen nicht so lange warten. Lassen Sie einfach den Download-Vorgang auf dem entfernten System laufen und verlassen Sie die Screen-Sitzung, indem Sie „Ctrl-A“ gefolgt von „d“ drücken. Sie werden eine Ausgabe etwa wie unten sehen.

[detached from 1365.pts-0.server]

Nach dem Trennen von der Screen-Sitzung können Sie sich vom entfernten System abmelden. Der entfernte Job wird auf dem Server weiterhin laufen.

Sie können jederzeit mit dem Befehl wieder zur Bildschirm-Sitzung zurückkehren:

$ screen -r

Sie werden sehen, dass der Prozess dort noch läuft.

Wenn Sie mehr als eine Screen-Sitzung haben, müssen Sie die Screen-Sitzungs-ID eingeben, um sich wieder damit zu verbinden. Um die Anzahl der Screen-Sitzungen anzuzeigen, führen Sie aus:

$ screen -ls

Beispielausgabe wäre:

There are screens on:There are screens on: 
     1382.pts-0.server (Saturday 15 July 2017 04:39:51  IST) (Detached) 
     1365.pts-0.server (Saturday 15 July 2017 04:38:44  IST) (Detached)
2 Sockets in /var/run/screen/S-sk.

Jetzt erneut mit der gewünschten Bildschirm-Sitzung verbinden, sagen wir 1382, führen Sie aus:

$ screen -r 1382

Für weitere Details siehe die Handbuchseiten.

$ man screen

Methode 2 - Verwendung von tmux

Der tmux ist ein Terminal-Multiplexer, der es ermöglicht, eine Reihe von Terminals zu erstellen, zuzugreifen und von einem einzigen Bildschirm aus zu steuern. Eine tmux-Sitzung kann von einem Bildschirm getrennt und im Hintergrund weiter ausgeführt werden, um später wieder angehängt zu werden. Wie das Screen-Tool können Sie tmux auch verwenden, um sich von einer SSH-Sitzung zu trennen, ohne die Remote-Jobs zu beenden. Der tmux-Befehl ist auf den meisten Linux-Betriebssystemen vorinstalliert. Falls er nicht installiert ist, können Sie ihn über den Paketmanager Ihrer Distribution installieren.

Bei Arch Linux und Abkömmlingen:

$ sudo pacman -S tmux

Auf RHEL, CentOS und anderen RPM-basierten Systemen:

$ sudo yum install tmux

Auf Debian, Ubuntu und anderen DEB-basierten Systemen:

$ sudo apt-get install tmux

Auf SUSE/OpenSUSE:

$ sudo zypper install tmux

Nach der Installation von tmux starten Sie die tmux-Sitzung mit dem Befehl:

$ tmux

Jetzt starten Sie Ihre Aufgabe oder Arbeit. Trennen Sie dann sicher die tmux-Sitzung, ohne die entfernten Jobs zu beenden, indem Sie "CTRL-b" gefolgt von "d" drücken. Dadurch wird Ihre tmux-Sitzung getrennt, aber alles, was Sie in dieser Sitzung tun, läuft weiterhin im Hintergrund. Das bedeutet, dass alle entfernten Aufgaben weiterlaufen, auch wenn Sie von der Sitzung getrennt sind.

Um die verfügbaren Sitzungen aufzulisten, führen Sie aus:

$ tmux ls
0: 1 windows (created Sat Jul 15 16:51:35 2017) [134x33]
1: 1 windows (created Sat Jul 15 16:53:58 2017) [134x33]

Sie können sich wieder mit der tmux-Sitzung verbinden, indem Sie die jeweilige Sitzungs-ID wie unten gezeigt verwenden:

$ tmux attach -t 0

Für weitere Details siehe die Handbuchseiten.

$ man tmux

Methode 3 - Verwendung von Reptyr

Was, wenn Sie vergessen haben, die Befehle von Anfang an in screen/tmux zu starten? Keine Sorge. Hier kommt Reptyr zur Hilfe. Reptyr hilft Ihnen dabei, laufende Prozesse zwischen Terminals zu verschieben. Wir haben bereits einen detaillierten Leitfaden über Reptyr veröffentlicht. Schauen Sie sich den folgenden Link an.

  • Reptyr – Einen laufenden Prozess von einem Terminal auf ein anderes verschieben, ohne ihn zu schließen

Methode 4 - Verwendung von nohup

nohup, steht für No hangup, ist ein weiteres Kommandozeilen-Tool, das Ihnen hilft, Linux-Befehle auch nach der Trennung von SSH-Sitzungen auszuführen. Da es Teil der GNU-Coreutils ist, müssen Sie es nicht installieren. Es ist in allen Linux-Distributionen vorinstalliert.

Die Verwendung ist absolut einfach. Nachdem Sie sich in Ihr Remotesystem eingeloggt haben, müssen Sie nur:

$ nohup <command> &

Ja, es ist so einfach.

Beispiel :

$ nohup wget http://mirror.waia.asn.au/ubuntu-releases/xenial/ubuntu-16.04.2-desktop-amd64.iso &

Sie können jetzt die SSH-Sitzung beenden. Der entfernte Auftrag läuft weiter.

Melden Sie sich beim entfernten System an und führen Sie Folgendes aus, um die Liste der laufenden Aufgaben anzuzeigen.

$ jobs -l
[1]+ 1421 Running nohup wget http://mirror.waia.asn.au/ubuntu-releases/xenial/ubuntu-16.04.2-desktop-amd64.iso &

Standardmäßig werden die Ausgaben an 'nohup.out' angehängt. Sie können natürlich die Ausgabedatei ändern.

Hier ist ein weiteres Beispiel.

$ nohup find -size +10M > log.txt &

Der obige Befehl findet die Dateien mit einer Größe von mehr als 10M und schreibt die Ausgabe in die Datei log.txt.

Für weitere Details siehe die Manpages.

$ man nohup

Und das war's vorerst, Leute. Habt ihr etwas im Sinn? Zögert nicht, es mir im Kommentarbereich unten mitzuteilen. Mehr gute Sachen werden noch kommen. Besucht uns weiterhin!