Пусть cron подождет, пока работа закончится, прежде чем снова запускать - PullRequest
3 голосов
/ 06 сентября 2010

У меня есть cronjob, который выполняется каждую секунду, которая обычно выполняется в секундах, но иногда в течение нескольких минут.

Мне нужно, чтобы cron не выполнял команду, если она уже запущена, когда наступит следующая минута.

Строка выглядит следующим образом * / 1 * * * * cmd

Iпробовал с этим * * * * * ID = job1 FREQ = 1m ПОСЛЕ = job1 cmd

, но безуспешно.

Можно ли решить с помощью cron или мне нужно реализовать блокировку

Ответы [ 2 ]

5 голосов
/ 06 сентября 2010

Вы можете создать временный файл с именем inProgress (или любым другим) и сохранить его в стандартном месте и использовать его для связи со следующим заданием, если оно будет запущено или нет.

Что, если поток работы будет выглядеть так:

  1. Проверка стандартного inProgress файл
  2. Если он существует, выйти
  3. Иначе, создать inProgress файл
  4. Работай
  5. Удалить файл inProgress.
2 голосов
/ 20 мая 2011

Блокировка - это один из способов достижения этого, или вы можете использовать программу, похожую на Cron, под названием The Fat Controller, которую я создал, чтобы решить именно эту проблему.

Вместо того, чтобы запускаться каждые x минут, вы можете установить интервал ожидания между одним экземпляром окончания скрипта и другим началом.

Вы даже можете пойти дальше и использовать коды завершения, чтобы сказать Fat Controller не ждать и снова запустить скрипт немедленно, если, например, скрипт, который обрабатывает ограниченное количество элементов, знает, что ему еще нужно выполнить больше, когда Это конец. Это хороший способ обработки пакетной обработки.

На сайте есть и другие примеры использования:

http://www.4pmp.com/fatcontroller/

...