На этот вопрос уже есть ответ здесь:
В автономной системе Ubuntu 16.04 я есть два каталога. Я хочу, чтобы cronjob перемещал каждый файл из каталога A в каталог B (тот же раздел, тот же жесткий диск, та же файловая система и т. Д.). Проблема в том, что / может быть: файлы будут довольно большими, и по некоторым причинам cronjob должен запускаться довольно часто, например, каждую минуту или около того.
Таким образом, весьма вероятен следующий сценарий: задание cron запускается впервые, находит большой файл в каталоге A, начинает перемещать его в каталог B. Пока процесс mv все еще выполняется, задание cron выполняется во второй раз. . Вызовет ли это какие-либо проблемы?
Я нашел этот вопрос и ответы Что происходит, когда несколько процессов пытаются передать одни и те же файлы между двумя разными файловыми системами , но я думаю, что это касается одновременно запущенных процессов. Я надеюсь, что у cronjobs есть способ предотвратить нежелательное поведение.
, В то время как процесс mv все еще работает, cronjob выполняется во второй раз. Это вызовет какие-либо проблемы?
Это может да.
Обычно я был бы совет создать сценарий, поместить блокировку взаимного исключения (ВЗАИМНОЕ ИСКЛЮЧЕНИЕ) в тот сценарий и прекратить выполнять сценарий, если блокировка существует, и удалите блокировку, когда "mv" сделан сначала cronjob.
А очень простой пример:
if mkdir /var/lock/mylock; then
mv your_file /to/a/directory/
rm -rf /var/lock/mylock
else
exit 1
fi