Перемещение больших файлов с помощью cronjob: что произойдет, если mv все еще будет запущен при следующем запуске? [дубликат]

В автономной системе Ubuntu 16.04 я есть два каталога. Я хочу, чтобы cronjob перемещал каждый файл из каталога A в каталог B (тот же раздел, тот же жесткий диск, та же файловая система и т. Д.). Проблема в том, что / может быть: файлы будут довольно большими, и по некоторым причинам cronjob должен запускаться довольно часто, например, каждую минуту или около того.

Таким образом, весьма вероятен следующий сценарий: задание cron запускается впервые, находит большой файл в каталоге A, начинает перемещать его в каталог B. Пока процесс mv все еще выполняется, задание cron выполняется во второй раз. . Вызовет ли это какие-либо проблемы?

Я нашел этот вопрос и ответы Что происходит, когда несколько процессов пытаются передать одни и те же файлы между двумя разными файловыми системами , но я думаю, что это касается одновременно запущенных процессов. Я надеюсь, что у cronjobs есть способ предотвратить нежелательное поведение.

0
задан 28 June 2017 в 23:18

1 ответ

, В то время как процесс 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
2
ответ дан 3 November 2019 в 00:45

Другие вопросы по тегам:

Похожие вопросы: