Debian.pro

Блог для пользователей и администраторов Debian


Запускаем rsync так, чтобы он выполнялся до победного конца.

Иногда возникает необходимость перенести кучу файлов с сервера на сервер. Ну или скопировать из каталога в каталог. Многие используют для этого 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. На опеннете вполне неплохой.


Комментарии (4):

  1. viert :

    sleep 10 бесполезный. ибо выполнится только при удачном завершении rsync. если ты хотел сделать sleep между ретраями, то надо бы делать ||, но тогда съедается твой код ответа.

  2. Я бы еще в случае если скрипт используется для резервного копирования использовал бы -azo , ну и прикрутить уведомления на почту. )

  3. @viert
    sleep пока убрал, обдумаю на досуге.

    @[v-8]_jupiter
    какие опции кормить rsync’у — в общем-то без разницы, суть не изменится.

  4. Алексей :

    until rsync -avz —progress /var/www root@remoteserver:/var/www; do sleep 10; done

Написать комментарий