Мое приложение использует rsync для копирования файлов из сетевого драйвера на локальный в качестве кеша для повышения производительности.
Но поскольку мое приложение может запускаться параллельно, так как rsync, может быть случай, когда 2 экземпляра rsync выполняются параллельно с одним и тем же источником и каталогом.
Я столкнулся с проблемой, что место назначения не синхронизируется полностью (один подкаталог остается пустым). поэтому я сомневаюсь, что это проблема rsync, поэтому
Я использую следующие варианты:
rsync -a --copy-unsafe-links --delete
Вероятно, запускать rsyn параллельно безопасно, но неэффективно, поскольку, скорее всего, файлы будут переданы дважды, поскольку rsync составляет список файлов для передачи в начале. Конечно, всегда существует небольшая вероятность того, что один и тот же файл будет передан одновременно обоими rsyncs, но впоследствии содержимое должно быть таким же.
Чтобы предотвратить двойное выполнение, обычно я пишу сценарий, который проверяет, а в противном случае touch
- это файл блокировки, который удаляется в конце. Как вариант, вы можете использовать ловушку в своем сценарии для очистки файла блокировки, если вы прервете сценарий или когда возникнет ошибка (используйте «справочную ловушку» в вашей оболочке). Насколько мне известно, такого механизма блокировки в самом rsync нет (что было бы сложно реализовать в любое время).