Nachdem die SSH-Verbindung geschlossen wurde, ist ein rsync-Job abgeschlossen

13

Ich übertrage eine große Menge von Dateien von einem Computer auf einen anderen mit rsync. Ich mache dies durch SSHing in den Quellcomputer und Ausführen eines Befehls wie folgt:

sudo rsync ssh --rsync-path="sudo rsync" source_dir [email protected]:dest_dir.

Auch wenn ich nohupvor diesem Befehl hinzufüge, wird die Verbindung beendet, sobald ich das Terminalfenster schließe, von dem aus ich SSHed ausgeführt habe.

Wie kann ich es so einstellen, dass meine Dateiübertragung auch dann fortgesetzt wird, wenn ich meine SSH-Verbindung beende?

Jaynp
quelle

Antworten:

16

Der Grund, warum nohupes Ihnen nicht hilft, ist, dass das Programm mit Standard-E / A-Dateien arbeitet.

Hier ist ein Auszug aus der Wiki-Seite für nohup:

Hinweis - In der Regel werden Jobs im Hintergrund nicht unterstützt, um zu vermeiden, dass sie beim Abmelden von einer Remote-SSH-Sitzung beendet werden. Ein anderes Problem, das in dieser Situation häufig auftritt, ist, dass ssh sich weigert, sich abzumelden ("hängt"), da es sich weigert, Daten von / zu den Hintergrundjobs zu verlieren. Dieses Problem kann auch behoben werden, indem alle drei E / A-Datenströme umgeleitet werden:

nohup ./myprogram > foo.out 2> foo.err < /dev/null &Beachten Sie auch, dass eine schließende SSH-Sitzung nicht immer ein HUP-Signal an abhängige Prozesse sendet. Dies hängt unter anderem davon ab, ob ein Pseudo-Terminal zugewiesen wurde oder nicht.

Sie können dafür verwenden screen.

Erstellen Sie einfach eine Bildschirmsitzung mit: screen -S rsync Dann trennen Sie Ihren Bildschirm mit CTRL+A d

Und Sie können von SSH trennen

bakytn
quelle
4
Ich möchte hinzufügen, dass bei der Ausführung von Arbeiten, die bei einer Unterbrechung, z. B. durch einen Verbindungsverlust, problematisch sind, diese in einer Bildschirmsitzung ausgeführt werden. Der Bildschirm schützt vor versehentlichem Verbindungsverlust. Sie können sich remote anmelden, den Bildschirm starten und Ihre Arbeit beginnen. Wenn Sie die Verbindung verlieren, können Sie erneut eine Verbindung zu einer laufenden Bildschirminstanz herstellen. Der Bildschirm verfügt über weitere nützliche Funktionen: Erfassen der Sitzung in einer Protokolldatei, mehrere "Bildschirme" in einer Sitzung (wodurch der Netzwerkaufwand verringert wird) und mehrere Viewer (Klassenzimmerstil). Erwähnenswert ist auch, dass tmux eine Bildschirmalternative ist.
Johan
6

Dieser Bildschirmbefehl ist in Ordnung, hat aber nicht genau für meine Anforderungen funktioniert.

Das hat viel besser funktioniert:

nohup rsync -va --delete ###.###.###.###:/var/www/sites/ /var/www/sites < /dev/null &
Ligemer
quelle
arbeitete für mich, genau wie die akzeptierte Antwort, danke
Salaros