GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Reptyr – Verschieben Sie einen laufenden Prozess von einem Terminal zum anderen, ohne es zu schließen

Nehmen wir an, Sie führen einen Prozess auf einem Remote-Server über eine SSH-Sitzung von Ihrem lokalen System aus aus. Sie wussten nicht, dass die Ausführung des Remote-Jobs lange dauern würde. Sie möchten den laufenden Job einfach auf dem Remote-Server selbst belassen und die SSH-Sitzung schließen, ohne den Remote-Job zu beenden, und ihn dann später oder am nächsten Tag wieder an die SSH-Sitzung anhängen. Natürlich können Sie den Job in screen/tmux starten Sitzung und trennen Sie sich von der Bildschirmsitzung, ohne den Remote-Job zu beenden, und beenden Sie die SSH-Sitzung. Aber wenn Sie vergessen haben, die Bildschirmsitzung überhaupt zu starten, gibt es später keine Möglichkeit, sich wieder mit dem laufenden Prozess zu verbinden. Sobald Sie die SSH-Sitzung geschlossen haben, werden auch die laufenden Prozesse auf dem Remote-System geschlossen. Also, was werden Sie in solchen Fällen tun? Kein Problem. Hier ist Reptyr Befehl kommt in Hilfe.

Reptyr ist ein Befehlszeilentool zum Verschieben laufender Prozesse zwischen ptys. Starten Sie einfach einen Prozess, der lange dauert, um auf Ihrem Remote-System über eine SSH-Sitzung von Ihrem lokalen Desktop oder Laptop abgeschlossen zu werden, und schließen Sie die SSH-Sitzung, gehen Sie nach Hause und hängen Sie den laufenden Prozess am nächsten Tag wieder an. Außerdem können Sie einen lange laufenden Prozess problemlos von einem Terminal auf ein anderes Terminal migrieren/verschieben, ohne ihn beenden zu müssen. Klingt nützlich? Natürlich ist es das!

Herunterladen - Kostenloses eBook:"6 nützliche Linux-Befehlszeilen-Tools für Systemadministratoren"

Dieses kurze Tutorial beschreibt, wie man einen laufenden Prozess mit dem Reptyr-Befehl auf ein neues Terminal verschiebt.

Installieren Sie Reptyr auf Ihren Remote-Systemen

Hinweis:  Ihr Remote-System sollte tmux haben oder Bildschirm installiert, um den laufenden Prozess zu verschieben.

Führen Sie in Arch Linux und seinen Derivaten Folgendes aus:

$ sudo pacman -S reptyr

Führen Sie in DEB-basierten Systemen den folgenden Befehl aus, um Reptyr zu installieren:

$ sudo apt-get install reptyr

Um screen oder tmux zu installieren, führen Sie Folgendes aus:

$ sudo apt-get install tmux screen

Auf RHEL/CentOS/Scieintific Linux/Fedora ist reptyr nicht in den Repositories verfügbar. Sie können es also wie unten gezeigt kompilieren und installieren.

Installieren Sie die folgenden Voraussetzungen:

$ sudo yum install git tmux screen
$ sudo yum groupinstall 'development tools'

Git-Clone-Reptyr-Repository mit Befehl als Root-Benutzer:

$ git clone https://github.com/nelhage/reptyr.git

Gehen Sie zum reptyr-Verzeichnis:

$ cd reptyr/

Führen Sie die folgenden Befehle aus, um es zu kompilieren und zu installieren.

$ make
$ sudo make install

Ich habe Reptyr aus dem Quellcode in CentOS 7 64-Bit-Server-Edition kompiliert und installiert, und es hat wie oben beschrieben ziemlich gut funktioniert.

Verschieben Sie einen laufenden Prozess von einem Terminal zu einem anderen, ohne ihn mit Reptyr zu schließen

Normalerweise verbinden wir uns von jedem lokalen System über SSH mit dem Remote-Server, wie unten gezeigt.

# ssh [email protected]_Of_remote_system

Nachdem Sie sich mit dem Remote-System verbunden haben, starten Sie einen lang andauernden Prozess. Zum Beispiel werde ich Ubuntu 16.04 Desktop ISO mit wget herunterladen Befehl.

# wget http://cdimage.ubuntu.com/daily-live/current/xenial-desktop-amd64.iso

Beispielausgabe:

Wie Sie im obigen Screenshot sehen, beträgt die Gesamtgröße des Downloads 1,5 GB und es dauert mehr als 90 Minuten, bis er abgeschlossen ist.

Ich will nicht mehr so ​​lange warten und den Remote-Job auch nicht aufgeben.

Also, was ich tun werde, ist, einen Bildschirm zu starten oder tmux Sitzung in einem neuen Terminal verwenden Sie reptyr Dienstprogramm, um den laufenden Prozess innerhalb des Bildschirms oder der tmux-Sitzung abzurufen. Schließlich werde ich beide SSH-Sitzungen beenden und den laufenden Prozess wieder anhängen, wann immer ich will.

Lassen Sie uns ein neues Terminalfenster oder eine neue Registerkarte öffnen und eine Bildschirm- oder tmux-Sitzung starten, indem Sie screen eingeben oder tmux im Terminal:

# screen

oder

# tmux

Wie Sie im obigen Screenshot sehen, wurde die Bildschirmsitzung gestartet und läuft.

Lassen Sie uns nun die laufenden Prozesse im neuen Terminal finden, indem Sie den folgenden Befehl verwenden:

# ps -a

Beispielausgabe:

 PID TTY TIME CMD
 2320 pts/0 00:00:11 wget
 2343 pts/1 00:00:00 screen
 2358 pts/2 00:00:00 ps

Notieren Sie sich die PID für das wget Prozess, und hängen Sie den laufenden Prozess innerhalb der Bildschirmsitzung mit dem Befehl an:

# reptyr 2320

Fertig! Wie Sie im obigen Screenshot sehen, wurde der wget-Prozess vom alten Terminal in das neue Terminal-Fenster (dasjenige, das mit der Bildschirmsitzung ausgeführt wird) verschoben (migriert).

Sobald Sie den laufenden Prozess aus dem ursprünglichen Terminal verschoben haben, wird er sofort geschlossen und im neuen Terminal dort fortgesetzt, wo wir ihn unterbrochen haben.

Jetzt können Sie das Terminal sicher trennen oder schließen und der Job wird auf Ihrem Remote-Server weiter ausgeführt.

Um die Bildschirm- oder tmux-Sitzung zu trennen, drücken Sie STRG+A+D .

Nachdem Sie sich von der Bildschirmsitzung getrennt haben, wird die folgende Meldung angezeigt.

[detached from 2344.pts-1.server1]

Um den laufenden Prozess erneut anzuhängen, verbinden Sie sich per SSH mit Ihrem Remote-System:

# ssh [email protected]

Hier. 192.168.1.150 ist die IP-Adresse meines Remote-Servers.

Und führen Sie Folgendes aus, wenn Sie eine Bildschirmsitzung verwenden:

# screen -Dr

Führen Sie für eine tmux-Sitzung Folgendes aus:

# tmux attach

Voila! Der laufende Prozess wurde erneut angehängt, und Sie sehen dort, dass der Prozess noch läuft.

Wie Sie im obigen Screenshot sehen, wird der wget-Job nicht unterbrochen oder beendet und läuft immer noch. Es wird so lange ausgeführt, wie Ihr Remote-System betriebsbereit ist.

Zusammenfassung

Zusammenfassend ist Reptyr ein sehr, sehr wichtiges und nützliches Tool für Linux-Systemadministratoren aller Ebenen. Falls Sie es satt haben, einen Prozess zu durchlaufen, der sehr lange gedauert hat, wird Reptyr definitiv hilfreich sein. Öffnen Sie einfach ein neues Terminalfenster, SSH zu Ihrem Remote-Server, finden Sie die laufende Prozess-ID und verschieben Sie sie sicher in die Bildschirm- oder tmux-Sitzungen und beenden Sie die SSH-Sitzung. Weitere Einzelheiten finden Sie unter den am Ende dieser Anleitung angehängten Links.

Empfohlene Lektüre:

  • Tmux-Sitzung auf Remote-System automatisch starten, wenn Sie sich über SSH anmelden
  • So zeigen Sie Prozessinformationen mit Procs unter Linux an
  • Tmate - Teilen Sie Ihr Terminal sofort mit jedem von überall
  • So ändern Sie Schriftart und -größe der Linux-Konsole
  • So sperren Sie virtuelle Konsolensitzungen unter Linux
  • Wechseln zwischen TTYs ohne Verwendung von Funktionstasten in Linux

Das war's erstmal, Leute. Nun, dann überlasse ich es Ihnen, sich mit diesem nützlichen Tool vertraut zu machen. Probieren Sie es aus und Sie werden nicht enttäuscht sein.

Referenzlinks:

  • Reptyr GitHub
  • Reptyr-Leitfaden

Linux
  1. Wie verschiebt man alle Dateien (einschließlich versteckter) von einem Verzeichnis in ein anderes?

  2. Wie kann ich die Ausgabe eines laufenden Prozesses in einer anderen Bash-Sitzung anzeigen?

  3. Kopieren Sie die letzten N-Zeilen von einer Datei in eine andere?

  4. CentOS / RHEL :So verschieben Sie eine Volumengruppe von einem System auf ein anderes

  5. Kopieren Sie die Ordnerstruktur (ohne Dateien) von einem Ort zum anderen

Reptyr – Verschieben Sie einen laufenden Prozess von einem Terminal zum anderen, ohne es zu schließen

Wie kopiert man Einstellungen von einem Gerät auf ein anderes?

Verschieben Sie ein E-Mail-Konto von einem cPanel-Server auf einen anderen

Wie verschiebt man Konten von einem cPanel-Server auf einen anderen cPanel-Server?

Ausführen von Skripts aus einem anderen Verzeichnis

Verschieben Sie ein logisches Volume von einer Volume-Gruppe in eine andere