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

Этот вопрос уже имеет ответ здесь: Общее решение для предотвращения параллельного выполнения длинного задания cron? 7 ответов

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

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

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

0
задан 29 June 2017 в 09:18

3 ответа

Пока процесс mv все еще запущен, cronjob выполняется во второй раз. Это вызовет проблемы?

Это может быть да.

Как правило, я бы советовал создать скрипт, установить в этом скрипте блокировку исключения (MUTEX) и прекратить выполнение скрипта, если существует блокировка и удалить блокировка, когда «mv» выполняется с первой cronjob.

Очень простой пример:

if mkdir /var/lock/mylock; then
  mv your_file /to/a/directory/
  rm -rf /var/lock/mylock
else
  exit 1
fi
2
ответ дан 22 May 2018 в 21:03
Пока процесс mv все еще запущен, cronjob выполняется во второй раз. Это вызовет проблемы?

Это может быть да.

Как правило, я бы советовал создать скрипт, установить в этом скрипте блокировку исключения (MUTEX) и прекратить выполнение скрипта, если существует блокировка и удалить блокировка, когда «mv» выполняется с первой cronjob.

Очень простой пример:

if mkdir /var/lock/mylock; then mv your_file /to/a/directory/ rm -rf /var/lock/mylock else exit 1 fi
2
ответ дан 18 July 2018 в 10:57
Пока процесс mv все еще запущен, cronjob выполняется во второй раз. Это вызовет проблемы?

Это может быть да.

Как правило, я бы советовал создать скрипт, установить в этом скрипте блокировку исключения (MUTEX) и прекратить выполнение скрипта, если существует блокировка и удалить блокировка, когда «mv» выполняется с первой cronjob.

Очень простой пример:

if mkdir /var/lock/mylock; then mv your_file /to/a/directory/ rm -rf /var/lock/mylock else exit 1 fi
2
ответ дан 24 July 2018 в 19:41

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

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