Подтвердить что ты не робот

Будет ли Cron запускать новую работу, если текущая работа не завершена?

Возможный дубликат:
Как предотвратить выполнение задания cron, если оно уже запущено

У меня есть задание cron, которое может занять 2 минуты или может занять 5 часов. Мне нужно убедиться, что это задание всегда выполняется.

Мой вопрос:

Будет ли он запускаться после того, как предыдущий будет выполнен или они оба будут работать одновременно и испортить базу данных, если я запустил ее каждую минуту?

4b9b3361

Ответ 1

Я бы предложил записать его в базу данных. Я бы записал, когда началось script, и если задача была успешно завершена. script также должен обновлять запись в db - что-то вроде каждых 5 минут - я все еще запущен.

Когда запускается новое задание, он должен проверить, завершены ли все предыдущие задачи или последнее обновление, а затем минута (?) назад, если да, то запустите, no then exit.

Таким образом, вы знаете, что работает предыдущий script или если он умер, задание, которое не завершено и не обновлено в течение 10 минут, будет помечено как завершено.

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

Ответ 2

Они будут работать одновременно. Стандартная практика вокруг этого заключается в создании блокировки файла (обычно называемой стадом), и если блокировка недоступна, не запускайте.

Преимущества этого подхода Zdenek в том, что он не требует базы данных, и когда процесс завершается, стая автоматически освобождается. Сюда относятся случаи, когда процесс убит, перезагрузка сервера и т.д.

Пока вы не укажете, что написано в вашем задании cron, на большинстве языков стая стандартная. Я бы предложил googling для блокировок и язык, который вы используете, поскольку это будет более надежное решение и не полагаться на случайные таймауты. Вот несколько примеров из SO:

Ответ 3

Оба будут работать одновременно.