Как запустить rsync при изменении файла?

7

Я могу синхронизировать папки с rsync -avz /directory /target , теперь я хочу сделать это, если я изменил файл в /directory , поэтому rsync следует вызывать автоматически.

Я использую Virtual Box, а общая папка Virtual Box очень медленная, особенно если у вас есть веб-страница, которая использует общую папку в качестве корня документа. С rsync я мог бы работать с моими локальными файлами в общей папке и автоматически синхронизировать ее с корнем документа.

Надеюсь, у кого-то есть идея, как это сделать, crontab будет нехорошо, потому что он выполняется каждые x минут, поэтому, если я ничего не сделаю, он все равно вызовет rsync , но не будет, если я изменил мой файл.

С наилучшими пожеланиями

    
задан BlackScorp 30.08.2013 в 07:30
источник

3 ответа

8
  

crontab будет нехорошо, потому что он выполняется каждые x секунд / минут, поэтому, если я ничего не сделаю, он все равно вызовет rsync, но не если я изменил свой файл

rsync будет синхронизировать только те файлы, которые были изменены. Если ничего не изменилось, он выйдет. Это действительно минимальные накладные расходы.

Если вы недовольны тем, что можете использовать inotifywait :

while inotifywait -r /directory/*; do
    rsync -avz /directory /target
done

Это будет более мгновенно, но он будет делать все каждый , когда вы сохраняете.

    
ответ дан Oli 30.08.2013 в 08:01
источник
1

Вы можете использовать Lsyncd (Live Sync Daemon) :

  

Lsyncd наблюдает за интерфейсом монитора событий дерева локальных каталогов   (inotify или fsevents). Он объединяет и объединяет события для нескольких   секунд, а затем порождает один (или более) процесс (ы) для синхронизации   изменения. По умолчанию это rsync. Таким образом, Lsyncd является легким весом   зеркальное решение, которое сравнительно просто установить, не требуя   новые файловые системы или блокировать устройства и не мешает локальной файловой системе   производительность.

Вот, например, учебник для Ubuntu 16.04 .     

ответ дан Arigion 04.09.2017 в 18:41
0

Вы можете использовать inotifywait и rsync . inotifywait с включенным событием modify,create,delete . Таким образом, вы будете синхронизироваться с вашим сервером только при изменении файла, иначе он будет синхронизироваться всякий раз, когда будет прочитан файл (редакторы читают несколько раз ваш файл, чтобы проверить, есть ли какие-либо изменения). Так сказано:

while inotifywait -r -e modify,create,delete /directory; do
    rsync -avz /directory /target
done
    
ответ дан silgon 10.11.2016 в 10:23