Заставить задание cron ждать завершения другого задания

в настоящее время я пытаюсь сделать что-то вроде этого:

  • Резервное копирование 1 задания cron _ежедневно
  • Резервное копирование заданий cron 2 _еженедельно
  • 3 резервных копии заданий cron _ежемесячно

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

так что я думал о прокси-скрипте, поэтому вместо выполнения вышеуказанных заданий cron я бы сделал что-то вроде

  • 1 проверка задания cron _, если _любое резервное копирование _выполняется __и _выполняется _резервное копирование _ежедневно _, иначе _подождите _до _] завершено
  • 2 cron job check _if _anybackup _is _running _and _run _backup _еженедельно _else _подождите _до _] завершено
  • 3 cron job check _if _anybackup _is _running _and _run _backup _ежемесячно _else _подождите _до _] завершено

тогда единственное, о чем я бы заботился, это то, что они начинаются со смещения в любое время, чтобы они не блокировали друг друга. также время «ожидания» должно быть выбрано с умом, чтобы они не «перепроверяли» в один и тот же момент и снова не блокировали друг друга (с 3 процессами, мы могли бы использовать смещение +1 для процесса еженедельно, +2 для процесса ежемесячно и даже / нечетные счетчики времени перепроверки)

однако я не уверен, как реализовать это с помощью сценария Linux. я не уверен, какой будет "правильная" процедура.использовать файл блокировки, который создается при запуске процесса, и проверить это? а что будет если заблокировать? это «хороший» способ просто использовать сон и снова проверить файл блокировки через время X? Я не уверен, что происходит, когда я использую спящий режим в потоке Linux -, я имею в виду, что :— это запланированный «счетчик», использующий мощность процессора, или есть какое-то прерывание, которое процессор отправит процессу ожидание через время X (, например, «на основе событий»? )есть ли какие-нибудь более приятные методы, которые вы могли бы придумать? некоторые фрагменты кода сценария Linux были бы идеальными, поскольку я никогда не делал этого раньше

5
задан masi 24 June 2012 в 16:23
поделиться