Я пытаюсь синхронизировать файлы с удаленного сервера, который не является надежным, то есть подключение имеет тенденцию к сбоям "случайным образом" с
rsync: соединение неожиданно закрыто
Rsync вызывается с параметром --partial, поэтому я хотел бы иметь возможность вызывать rsync в цикле, пока файлы не будут полностью переданы. Похоже, нет флага, указывающего rsync на повторную попытку.
Как лучше всего это написать? Баш для цикла?
Если вы синхронизируете все за одну синхронизацию, вызывайте rsync в цикле, пока rsync не выдаст вам успешный код возврата.
Что-то вроде:
RC=1
while [[ $RC -ne 0 ]]
do
rsync -a .....
RC=$?
done
Это будет зацикливаться, вызывая rsync, пока не будет получен код возврата 0. Вы можете добавить туда сон, чтобы не допустить DOS для вашего сервера.
Некоторое время назад я столкнулся с этой же проблемой. В конце концов, я написал что-то похожее на ответ Дэвида, но немного поработал с максимальным количеством повторных попыток, отвечая на Ctrl-C и тому подобное: http://blog.iangreenleaf.com/2009/03/rsync-and-retrying-until-we-get-it.html.
Собираем все вместе с помощью sshpass
while ! sshpass -p 'xxxx' rsync --partial --append-verify --progress -a -e 'ssh -p 22' /source/ remoteuser@1.1.1.1:/dest/; do sleep 5;done