Я использую rsync
для обновления статического веб-контента на простом сервере (Digital Ocean, если это имеет значение) после внесения локальных изменений. Из-за структуры я хочу загружать только определенные файлы из (относительно большого) каталога. Для этого у меня есть серия rsync
вызовов, которые следуют одному и тому же шаблону, например
target="user_name@test_site.com:www_loc/"
rsync -av *html $target
rsync -av *pdf $target
rsync -av sub_dir_a/ $target/sub_dir_a
rsync -av sub_dir_b/ $target/sub_dir_b
Если я запускаю какие-либо из них по отдельности, они работают нормально. На самом деле, даже в сценарии большинство из них работает нормально. Однако иногда одна из синхронизаций зависает и возвращает ошибку:
ssh: connect to host test_site.com port 22: Connection timed out
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: unexplained error (code 255) at io.c(226) [sender=3.1.1]
У меня есть echo
вызовов в скрипте, чтобы показать, на каком из них он висит. Если я убью сценарий (ctrl-c
) и сразу же выполню любую из строк rsync
, они завершатся с той же ошибкой. Точно так же, если я попытаюсь ssh
к серверу сразу после этих ошибок, соединение ssh также зависает. Если я подожду несколько минут, я смогу запустить строку rsync
, которая изначально не удалась и работает нормально.
В качестве обходного пути я добавил в скрипт несколько вызовов sleep
, что значительно снизило частоту появления этой ошибки. Тем не менее, сценарий теперь работает вечно и все равно иногда дает сбой.
Я прочитал несколько SO вопросов об этом сообщении об ошибке, но все решения предназначены для исправления либо вызова (например, ошибка в адресе), либо брандмауэра (например, блокировка портов), либо сервера (например, , не работает правильный демон). Тем не менее, ни один из них не решает эту временную проблему.
Есть ли какие-либо параметры, которые мне не хватает (на любом конце соединения), которые бы помогли решить эту проблему?