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 screenAuf RHEL, CentOS und anderen RPM-basierten Systemen:
$ sudo yum install screen
Auf Debian, Ubuntu und anderen DEB-basierten Systemen:
$ sudo apt-get install screenAuf SUSE/OpenSUSE:
$ sudo zypper install screenNachdem Sie Screen auf Ihren Remote-Systemen installiert haben, starten Sie die Screen-Sitzung:
$ screenDie 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.isoDie 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 -rSie 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 1382Für weitere Details siehe die Handbuchseiten.
$ man screenMethode 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 tmuxAuf RHEL, CentOS und anderen RPM-basierten Systemen:
$ sudo yum install tmuxAuf Debian, Ubuntu und anderen DEB-basierten Systemen:
$ sudo apt-get install tmuxAuf SUSE/OpenSUSE:
$ sudo zypper install tmuxNach der Installation von tmux starten Sie die tmux-Sitzung mit dem Befehl:
$ tmuxJetzt 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 0Für weitere Details siehe die Handbuchseiten.
$ man tmuxMethode 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 nohupUnd 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!