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