J'ai rencontré le même problème il y a quelque temps. J'ai fini par écrire quelque chose de similaire à la réponse de David, mais en l'améliorant un peu avec des tentatives maximales, la réponse à Ctrl-C, etc : http://blog.iangreenleaf.com/2009/03/rsync-and-retrying-until-we-get-it.html .
La solution évidente est de vérifier la valeur de retour, et si rsync renvoie autre chose que le succès, exécutez-le à nouveau. Voici mon premier essai :
while [ $? -ne 0 ]; do rsync -avz --progress --partial /rsync/source/folder backupuser@backup.destination.com:/rsync/destination/folder; done
Le problème est que si vous voulez arrêter le programme, Ctrl-C n'arrête que le processus rsync en cours, et la boucle en lance un autre immédiatement. Pire encore, ma connexion continuait à se rompre si fort que rsync s'arrêtait avec le même code d'erreur "unkown" sur les problèmes de connexion que sur un SIGINT, donc je ne pouvais pas avoir ma boucle différencier et casser quand c'était nécessaire. Voici mon script final :
#!/bin/bash
### ABOUT
### Runs rsync, retrying on errors up to a maximum number of tries.
### Simply edit the rsync line in the script to whatever parameters you need.
# Trap interrupts and exit instead of continuing the loop
trap "echo Exited!; exit;" SIGINT SIGTERM
MAX_RETRIES=50
i=0
# Set the initial return value to failure
false
while [ $? -ne 0 -a $i -lt $MAX_RETRIES ]
do
i=$(($i+1))
rsync -avz --progress --partial /rsync/source/folder backupuser@backup.destination.com:/rsync/destination/folder
done
if [ $i -eq $MAX_RETRIES ]
then
echo "Hit maximum number of retries, giving up."
fi
1 votes
Bien que les réponses ci-dessous soient utiles, il serait peut-être préférable de trouver la raison de cet échec et de le faire cesser. Je suppose que vous contrôlez le serveur, le client et le réseau entre les deux, donc vous pouvez exécuter tcpdump à différents endroits pour voir comment il a été fermé. Peut-être que l'un de vos pare-feu ou dispositifs VPN ferme la connexion ?
0 votes
Le serveur auquel il se connecte est un hôte partagé, je n'ai donc pas d'accès root. Je vais peut-être chercher à savoir pourquoi il se ferme, mais pour l'instant je suis plus qu'heureux de le voir réessayer. Merci quand même de m'avoir prévenu
1 votes
J'ai été choqué de découvrir que rsync n'avait pas la capacité de réessayer !
0 votes
Rsync --partial --append a la possibilité de réessayer, manuellement, ou dans un script vérifiant le code de retour. Duplicata de : superuser.com/questions/302842/