Wie kann ich rsync anhalten / fortsetzen?

49

Wie kann ich einen laufenden rsync anhalten?

Zum ersten Mal habe ich Ctrl+ getan C, um es zu töten, und die -PFlagge verwendet, um wieder zu rennen. Ist dies anfällig für eine Beschädigung der aktuellen Dateiübertragung?

Beim zweiten Mal habe ich MacOS einfach in den Ruhezustand versetzt (indem ich den Deckel schließe). Wenn ich mir den laufenden Prozess ansehe, sehe ich 2 (nicht sicher warum) mit dem Status 'S'.

Versucht mit

kill -SIGCONT

um den Prozess fortzusetzen, aber es hat keine Wirkung.

qnoid
quelle

Antworten:

61

Sie können jedes Programm anhalten, indem Sie ein TSTP(höfliches) oder STOP(gewaltsames) Signal senden. rsyncDrücken Sie auf dem Terminal, in dem Sie sich gerade befinden , Ctrl+ ZSends TSTP. Setzen Sie mit dem Befehl fgoder bgim Terminal oder einem CONTSignal fort.

Es ist sicher, einen Rsync-Prozess abzubrechen und das Ganze erneut auszuführen. es wird dort fortgesetzt, wo es aufgehört hat. Es kann ein wenig ineffizient sein, insbesondere wenn Sie nicht bestanden haben --partial(enthalten in -P), weil rsyncalle Dateien erneut überprüft und die Datei verarbeitet werden, auf der es von Grund auf unterbrochen wurde.

Es kann ungewöhnliche Kombinationen von Optionen geben, die dazu führen, dass einige Dateien nicht richtig synchronisiert werden, möglicherweise --inplacemit etwas anderem, aber ich denke, keine einzelne Option wird dies verursachen.

Wenn Sie den Laptop vom Computer trennen und ihn an einer anderen Stelle erneut anschließen, erhält er möglicherweise eine andere IP-Adresse. Dann wird die von rsync verwendete TCP-Verbindung getrennt, sodass Sie sie beenden und erneut starten müssen. Dies kann auch passieren, wenn Sie Ihren Laptop anhalten und die TCP-Verbindung eine Zeitüberschreitung aufweist. Das Zeitlimit wird schließlich auf Anwendungsebene herausgefiltert, es kann jedoch eine Weile dauern. Es ist sicher, Ctrl+ zu drücken Cund rsync erneut auszuführen.

Gilles 'SO - hör auf böse zu sein'
quelle
1
Tatsächlich rsync -avhverlieren Sie einfach die aktuell kopierte Datei. Wenn die Datei groß ist, haben Sie viel Zeit verloren. Vielleicht ist das Ctrl+zVerschieben der temporären Datei (beginnen Sie mit einem Punkt) und dann Ctrl-Crsync eine bessere Lösung.
Malat
Vielen Dank für eine so ausführliche Erklärung. Zur Verdeutlichung: Strg + Z zum Anhalten, FG zum Fortsetzen, BG zum Anhalten.
Praesagus
3
@Praesagus bgsetzen Prozess zu b ack g runde , nicht zu stoppen.
Jari Keinänen
--partialbrauchte ich. Ich versuche, 21 GB Daten zu kopieren, und unter diesen habe ich eine 6,6 GB-Datei. Das Problem ist, dass das Netzwerk meine Verbindung nach ein paar GB Datenübertragung abbricht, --partialwofür ich genau das benötige.
AnthonyD973
20

Ctrl+ Zauszusetzen und:

$ fg

um fortzufahren, benutze

$ jobs

suspendierte Jobs zu sehen; bg [number]um sie zu untermalen; fg [number]um es in den Vordergrund zu stellen.

gauteh
quelle
2
Ctrl+SUnterbricht nur die Bildlaufausgabe, nicht das zugrunde liegende Programm (es sei denn, es wird blockiert, bis das Terminal seine Ausgabe akzeptiert), und nur, wenn Sie es nicht deaktiviert haben.
Gilles 'SO - hör auf böse zu sein'
1
Mit dem aktuellen Status 'S' wird der Vorgang nicht fortgesetzt. Ist es sicher, es mit Strg + C zu beenden und rsync erneut auszuführen? Welche anderen Optionen habe ich? Ich werde das nächste Mal berücksichtigen, danke.
16.
1
Beachten Sie auch, dass Strg-Z, um einen Prozess anzuhalten, nach einiger Zeit wahrscheinlich zu einem Timeout aller TCP-Netzwerkverbindungen führt, die von diesem Programm hergestellt wurden. Wenn ein rsync länger als ein paar Minuten angehalten bleibt, wird es sehr wahrscheinlich abrupt mit einer Fehlermeldung beendet, wenn Sie es wieder in den Vordergrund stellen, und es wird festgestellt, dass die geöffneten Sockets Fehler von Lese- und Schreibvorgängen zurückgeben.
Jim Dennis
8

Laufen Sie rsyncmit der --partialFlagge. Es werden dann teilweise Übertragungen beibehalten und teilweise Dateien fortgesetzt, wenn es gestartet wird.

Bahamat
quelle
5

Die Leute hier haben erwähnt, dass das --partialFlag funktioniert, es muss jedoch erwähnt werden, dass es nur fortgesetzt wird, wenn das Flag --appendoder --append-verifyverwendet wird, wenn es fortgesetzt wird.

--partialErstellt eine versteckte Datei der Datei, die den Synchronisierungsvorgang nicht abgeschlossen hat. Die Datei bleibt erhalten, wenn Sie die Synchronisierung unterbrechen. Die Datei wird weiterhin vervollständigt, wenn Sie sie --appendnach dem Fortsetzen verwenden . Andernfalls --appendwird die unvollständige versteckte Datei beibehalten und bleibt unvollständig.

Fazit: Sie können einfach rsync --partialmit Ctrl+ unterbrechen , Cwenn Sie rsync --appendbei der Wiederaufnahme verwenden

(Quelle: Kann rsync nach einer Unterbrechung fortgesetzt werden ? Abgerufen am 5. April 2016)

Mehdi Nellen
quelle
Wenn ich es also verwendet habe rsync --avP <source> <destination>, muss ich es mit STRG + C anhalten und dann einfach durch Eingabe fortsetzen rysnc --append?
Kingmakerking
@kingmakerking yes
Mehdi Nellen
@kingmakerking: Nein. Sie benötigen weiterhin die Optionen Ihres ersten Synchronisierungsvorgangs sowie die Quelle und das Ziel. Um fortzufahren, starten Sie Ihren vorherigen rsync-Befehl neu und ergänzen --append die vorhandenen Optionen.
mivk