Назад | Перейти на главную страницу

Безопасно ли синхронизировать один и тот же источник с одним и тем же местом назначения параллельно?

Мое приложение использует rsync для копирования файлов из сетевого драйвера на локальный в качестве кеша для повышения производительности.

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

Я столкнулся с проблемой, что место назначения не синхронизируется полностью (один подкаталог остается пустым). поэтому я сомневаюсь, что это проблема rsync, поэтому

Я использую следующие варианты:

rsync -a --copy-unsafe-links --delete

Вероятно, запускать rsyn параллельно безопасно, но неэффективно, поскольку, скорее всего, файлы будут переданы дважды, поскольку rsync составляет список файлов для передачи в начале. Конечно, всегда существует небольшая вероятность того, что один и тот же файл будет передан одновременно обоими rsyncs, но впоследствии содержимое должно быть таким же.

Чтобы предотвратить двойное выполнение, обычно я пишу сценарий, который проверяет, а в противном случае touch- это файл блокировки, который удаляется в конце. Как вариант, вы можете использовать ловушку в своем сценарии для очистки файла блокировки, если вы прервете сценарий или когда возникнет ошибка (используйте «справочную ловушку» в вашей оболочке). Насколько мне известно, такого механизма блокировки в самом rsync нет (что было бы сложно реализовать в любое время).