it-swarm.com.de

Rsync über SSH nach unterbrochener Verbindung fortsetzen?

Ich muss große Datenmengen (> 80 GB) mit rsync über ssh übertragen. Alles funktioniert einwandfrei, aber die DSL-Verbindung, von der die Sicherungsdaten gesendet werden, wird bis zu 3 Minuten lang alle 24 Stunden unterbrochen (ein Providerwechsel ist nicht möglich).

Wie mache ich:

  1. Die Übertragung automatisch neu starten, wenn die Verbindung wiederhergestellt ist?

  2. Stellen Sie sicher, dass nicht versehentlich zwei rsync-Befehle gleichzeitig ausgeführt werden.

45
Andreas

Folgendes sollte hilfreich sein:

#!/bin/bash

while [ 1 ]
do
    rsync -avz --partial source dest
    if [ "$?" = "0" ] ; then
        echo "rsync completed normally"
        exit
    else
        echo "Rsync failure. Backing off and retrying..."
        sleep 180
    fi
done

Wenn die Verbindung unterbrochen wird, wird rsync mit einem Exit-Code ungleich Null beendet. Dieses Skript führt einfach rsync erneut aus und lässt es so lange weiterlaufen, bis die Synchronisation normal abgeschlossen ist.

51
Peter

Dies entspricht in etwa der Antwort von Peter, gibt dem Benutzer jedoch die Option, welche Remote-Datei er speichern und wo er sie speichern möchte (und führt den Rsync über ssh durch). Ersetzen Sie USER und Host durch Ihren Benutzernamen bzw. Host.

 #!/bin/bash 
 echo -e "Bitte geben Sie den vollständigen (maskierten) Dateipfad ein:" 
 read -r path 
 echo "Pfad: $ Pfad "
 echo -e" Geben Sie das Ziel ein: "
 read -r dst 
 echo" Ziel: $ dst "
 while [1] 
 do 
 rsync --progress --partial --append -vz -e ssh "USER @ Host: $ path" $ dst 
 if ["$?" = "0"]; dann 
 echo "rsync normal beendet" 
 exit 
 else 
 echo "rsync failure. Wiederholung in einer Minute ..." 
 sleep 60 
 fi 
 done 

Die hier verwendeten rsync-Optionen ermöglichen die Fortschrittsstatistik während der Übertragung, das Speichern von Teildateien bei unerwartetem Fehler und die Möglichkeit, bei Wiederaufnahme an teilweise abgeschlossene Dateien anzuhängen. Die Option -v erhöht die Ausführlichkeit, die Option -z aktiviert die Komprimierung (gut für eine langsame Verbindung, erfordert jedoch mehr CPU-Leistung an beiden Enden) und die Option -e ermöglicht die Übertragung über ssh (Verschlüsselung ist immer gut).

Hinweis: Verwenden Sie diese Option nur, wenn Sie die Anmeldung mit öffentlichem Schlüssel mit Ihrem SSH aktiviert haben. Andernfalls werden Sie beim Neustart nach einem Kennwort gefragt (wodurch alle Funktionen von beendet werden) das Drehbuch).

7
KernelSanders

der Supervisor-Daemon (ein Prozesssteuerungsmanager) könnte sehr gut funktionieren, nachdem er RSA-Zertifikate beider Seiten mit einer ähnlichen Konfiguration wie folgt erstellt hat: (/etc/supervisor/supervisord.conf ist der Konfigurationsdateipfad auf Debian-basierten Systemen.)

[program:rsync-remoteserver]
command=rsync -avz --progress [email protected]:/destination /backup-path
stdout_logfile=/out-log-path  
stderr_logfile=/errlogpath
5
ugurarpaci

Die Antwort von @ Peter scheint sehr nützlich zu sein, aber für mich war es wichtig, die Option --update zu verwenden. Nachdem die Verbindung wieder aufgenommen wurde, versuchte rsync ohne --update von Anfang an, alle Daten zu synchronisieren. Mit --update werden bereits vorhandene Dateien übersprungen.

rsync --partial --update --progress -r [SOURCE] [DESTINATION]

1
YasiuMaster