
У меня есть некий общий каталог /path/to/dir
. Я запускаю процесс резервного копирования в этом каталоге. Процесс выполняется на сервере A, в то время как у меня есть доступ только к серверу B. Таким образом, когда процесс резервного копирования будет завершен на сервере A, у меня будут данные в общем каталоге, /path/to/dir
который также доступен на сервере B.
Теперь у меня есть скрипт bash на сервере B, который может запуститься только после завершения процесса резервного копирования. Поскольку я не могу получить доступ к другому серверу, я подумал о следующем:
Могу ли я проверить, /path/to/dir
используется ли он еще процессом резервного копирования, и запустить свой скрипт только в том случае, если процесс больше не запущен в каталоге?
Не знаю, важно ли знать, что это общий каталог (NFS).
решение1
Лучшее решение: создать файл блокировки на общем ресурсе, который будет существовать только во время выполнения задания и будет удален на сервере A после завершения задания.
На сервере B вы просто проверяете, существует ли этот файл, и если да, ждете, пока он исчезнет.
решение2
Установите приложение-производитель A для создания файлов как example_output.tar.gz.part
и только после того, как убедитесь, что все завершено, переименуйте вexample_output.tar.gz
Настройте потребляющее приложение B на игнорирование *.part
файлов и обработку всех файлов, которые не соответствуют*.part
Эта схема узнаваема, поскольку она используется во многих потребительских приложениях (на ум приходят веб-браузеры или клиенты SCP).
Таким образом, вам не нужен файл блокировки, и вы можете иметь несколько потребителей. Файл блокировки всегда является потенциальной причиной сбоя, если старый файл остается после того, как приложение умирает (или сервер перезагружается).