
Есть ли способ синхронизировать папку с удаленной серверной папкой, но переместить все только после завершения всей передачи?
Я не хочу, чтобы файлы перемещались один за другим, поскольку это может вызвать проблемы с работающим веб-сервером.
Я бы предпочел, чтобы вся папка была перемещена после того, как все будет передано на сервер (что займет около ~1 с)
решение1
Вы ищете--задержка-обновленийвариант. От man rsync
:
--delay-updates This option puts the temporary file from each updated file into a holding directory until the end of the transfer, at which time all the files are renamed into place in rapid succession. This attempts to make the updating of the files a little more atomic. [...] See also the "atomic-rsync" perl script in the "support" subdir for an update algorithm that is even more atomic (it uses --link-dest and a parallel hierarchy of files).
решение2
Самый безопасный способ — это rsync поместить файлы в альтернативный каталог за пределами docroot веб-сервера. Затем измените конфигурацию сервера, чтобы указать docroot на новую папку и дайте сигнал веб-серверу выполнить"изящный"перезагрузка его конфигурации. С Apache это должно гарантировать, что ни один запрос не будет неправильно обработан или потерян.
USR1 или graceful сигнал заставляет родительский процесс советовать дочерним процессам выйти после их текущего запроса (или выйти немедленно, если они ничего не обслуживают). Родитель перечитывает свои файлы конфигурации и заново открывает свои файлы журналов. Когда каждый дочерний процесс умирает, родитель заменяет его дочерним процессом из нового поколения конфигурации, который немедленно начинает обслуживать новые запросы.
Другими словами, я бы автоматизировал это с помощью скрипта оболочки и ssh, а не пытался бы найти параметры rsync для управления вашим веб-сервером.