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:
Redémarrer automatiquement le transfert lorsque la connexion est rétablie?
Assurez-vous qu'il n'y a pas accidentellement deux commandes rsync s'exécutant en même temps?
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.
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).
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
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]