web-dev-qa-db-fra.com

Reprendre rsync sur SSH après une connexion interrompue?

Je dois transférer de grandes quantités de données (> 80 Go) sur SSH à l'aide de rsync. Tout fonctionne correctement, mais la connexion DSL à partir de laquelle les données de sauvegarde sont envoyées tombera une fois toutes les 24 heures pendant 3 minutes maximum (le changement de fournisseur n'est pas une option).

Comment puis-je:

  1. Redémarrer automatiquement le transfert lorsque la connexion est rétablie?

  2. Assurez-vous qu'il n'y a pas accidentellement deux commandes rsync s'exécutant en même temps?

45
Andreas

Ce qui suit devrait être utile:

#!/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

Lorsque la connexion sera interrompue, rsync se fermera avec un code de sortie différent de zéro. Ce script continue simplement à réexécuter rsync, en le laissant continuer jusqu'à la fin de la synchronisation.

51
Peter

Cela ressemble beaucoup à la réponse de Peter, mais donne à l'utilisateur la possibilité de choisir le fichier distant qu'il souhaite et l'emplacement où il souhaite l'enregistrer (ainsi que d'effectuer la synchronisation rsync sur ssh). Remplacez USER et hôte par votre nom d'utilisateur et votre hôte, respectivement.

 #!/bin/bash 
 echo -e "Entrez le chemin complet du fichier (échappé):" 
 read -r chemin 
 echo "Chemin: $ chemin "
 echo -e" Entrez la destination: "
 lire -r dst 
 echo" Destination: $ dst "
 tant que [1] 
 do 
 rsync --progress --partial --append -vz -e ssh "USER @ Host: $ path" $ dst 
 si ["$?" = "0"]; puis 
 echo "rsync terminé normalement" 
 sortie 
 sinon 
 echo "échec de la synchronisation. Nouvelle tentative dans une minute ..." 
 sommeil 60 
 fi 
 terminé 

Les options rsync utilisées ici activent les statistiques de progression pendant le transfert, l'enregistrement de fichiers partiels en cas d'échec imprévu et la possibilité d'ajouter des fichiers partiellement terminés à la reprise. L'option -v augmente la verbosité, l'option -z active la compression (bon pour une connexion lente, mais requiert plus de puissance de l'unité centrale aux deux extrémités) et l'option -e nous permet d'effectuer ce transfert sur ssh (le cryptage est toujours bon).

Remarque: Utilisez-le uniquement si la connexion avec une clé publique est activée avec votre ssh. Sinon, il vous demandera un mot de passe lors du redémarrage (ce qui annule toutes les fonctionnalités de le scénario).

7
KernelSanders

superviseur démon (un gestionnaire de contrôle de processus) pourrait très bien fonctionner après la création de certificats rsa des deux côtés, avec une configuration similaire, comme suit: (/ etc/supervisor/supervisord.conf est le chemin du fichier de configuration sur les systèmes Debian)

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

La réponse de @ Peter semble être très utile, mais pour moi, il était important d'utiliser l'option --update. Après la reprise de la connexion, sans --update, rsync essayait de tout synchroniser depuis le tout début. Avec --update, les fichiers existants sont ignorés.

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

1
YasiuMaster