Иногда возникает необходимость перенести кучу файлов с сервера на сервер. Ну или скопировать из каталога в каталог. Многие используют для этого rsync. Но есть одно неприятное обстоятельство — если отвалится сеть — то процесс остановится и не продолжится. Хорошо бы, чтобы он перезапускался автоматически. Запускать в тупом цикле — некрасиво. Хочется, чтобы процесс перестал работать, когда каталоги синхронизируются.
В общем я решаю эту проблему примерно так:
serv@:~# i=2; false; while [ $i != 0 ]; do rsync -avz --progress /var/www root@remoteserver:/var/www ; i=$?; sleep 10; done
Процесс rsync будет перезапускаться, пока rsync не отдаст код 0 (означающий, что каталоги синхронизированы). В sleep указываем через сколько секунд (минут, часов) перезапускать. Запускать лучше, как обычно, в tmux или screen. Опции для rsync можно указывать любые, суть от этого в целом не изменится.
Ну и, само собой, прочитайте мануал по rsync. На опеннете вполне неплохой.
sleep 10 бесполезный. ибо выполнится только при удачном завершении rsync. если ты хотел сделать sleep между ретраями, то надо бы делать ||, но тогда съедается твой код ответа.
Я бы еще в случае если скрипт используется для резервного копирования использовал бы -azo , ну и прикрутить уведомления на почту. )
@viert
sleep пока убрал, обдумаю на досуге.
@[v-8]_jupiter
какие опции кормить rsync’у — в общем-то без разницы, суть не изменится.
until rsync -avz —progress /var/www root@remoteserver:/var/www; do sleep 10; done