Будет ли Cron запускать новую работу, если текущая работа не завершена?
Возможный дубликат:
Как предотвратить выполнение задания cron, если оно уже запущено
У меня есть задание cron
, которое может занять 2 минуты или может занять 5 часов.
Мне нужно убедиться, что это задание всегда выполняется.
Мой вопрос:
Будет ли он запускаться после того, как предыдущий будет выполнен или они оба будут работать одновременно и испортить базу данных, если я запустил ее каждую минуту?
Ответы
Ответ 1
Я бы предложил записать его в базу данных. Я бы записал, когда началось script, и если задача была успешно завершена.
script также должен обновлять запись в db - что-то вроде каждых 5 минут - я все еще запущен.
Когда запускается новое задание, он должен проверить, завершены ли все предыдущие задачи или последнее обновление, а затем минута (?) назад, если да, то запустите, no then exit.
Таким образом, вы знаете, что работает предыдущий script или если он умер, задание, которое не завершено и не обновлено в течение 10 минут, будет помечено как завершено.
Я должен упомянуть, что это решение может быть лучше, чем стая, когда у вас есть несколько серверов, и задача может быть запущена на любом из них.
Ответ 2
Они будут работать одновременно. Стандартная практика вокруг этого заключается в создании блокировки файла (обычно называемой стадом), и если блокировка недоступна, не запускайте.
Преимущества этого подхода Zdenek в том, что он не требует базы данных, и когда процесс завершается, стая автоматически освобождается. Сюда относятся случаи, когда процесс убит, перезагрузка сервера и т.д.
Пока вы не укажете, что написано в вашем задании cron, на большинстве языков стая стандартная. Я бы предложил googling для блокировок и язык, который вы используете, поскольку это будет более надежное решение и не полагаться на случайные таймауты. Вот несколько примеров из SO:
Ответ 3
Оба будут работать одновременно.