Бессрочная работа cron

Я разработал php-скрипт, который хочу запускать постоянно.

Например, сценарий run.php выполняет список задач, но я не знаю, сколько времени это займет: это может занять 30 секунд, 1 минуту, 2 минуты или больше.

Проблема в том, что этот сценарий не может выполняться одновременно.

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

Фактически, я хочу, чтобы это задание cron выполнялось Perpetual: каждый раз, когда run.php завершается, скрипт run.php перезагружается снова и снова ...

Я не знаю, как решить эту проблему.

Любая помощь, пожалуйста?

Спасибо.


person user3392106    schedule 31.07.2016    source источник
comment
Возможный дубликат Постоянного фонового задания в Linux   -  person pdexter    schedule 01.08.2016
comment
@pdexter Я считаю, что это не дубликат того вопроса. OP четко заявляет, что одновременное выполнение run.sh не должно происходить. Ответ на вопрос, на который вы ссылаетесь, не учитывает этот случай.   -  person pah    schedule 01.08.2016
comment
привет да, это не дубликат. забавно, вы потеряли больше времени на поиск дублирующего вопроса, чем на чтение моего вопроса;)   -  person user3392106    schedule 02.08.2016


Ответы (1)


У вас есть [как минимум] два варианта:

  • В поле run.php code определите, запущен ли он уже (установив некоторую внешнюю систему управления, которая проверяется в начале скрипта), и настройте задание crontab, как вы описали. [Я рекомендую этот подход].

  • Используйте что-то вроде (while :; do php run.php; done) & запустить его один раз и поместить в /etc/rc.local, чтобы он запускался при каждом запуске системы. Мне такой подход не очень нравится, но это возможное решение.

person pah    schedule 31.07.2016
comment
Привет, спасибо за ответ. по первому пункту, что вы имеете в виду, говоря о настройке внешней системы управления? как значение в файле / базе данных. я думал сделать это, но я боюсь одного: если я устанавливаю значение: on (скрипт запущен) и off (скрипт не запущен), я должен обновить значение до off в конце моего файл run.php. Но если run.php не может идти в конец файла (по каким-либо причинам), значение не может быть обновлено до off, и тогда скрипт не будет выполнен. я надеюсь это ясно - person user3392106; 31.07.2016
comment
@ user3392106 Да, это может создать проблему. Идеальное решение обеспечит постоянное обновление состояния. Если вы не можете предоставить это, вы все равно можете реализовать сторожевую систему, например, если состояние не обновлялось в течение n минут, вы предполагаете, что скрипту не удалось обновить состояние и он больше не выполняется. Это не идеально и может вызвать ошибки, если вы не уверены, сколько времени может потребоваться скрипт для выполнения ... но это другой подход. - person pah; 31.07.2016
comment
хорошо, спасибо threadp, я сделаю так. Вот идея; я создам текстовый файл с временным значением. в моем скрипте run.php я начну проверять значение в txt файле, если он пуст (или с меткой времени <7 минут), я вставляю метку времени перед моим настоящим скриптом php. в конце сценария run.php я стираю метку времени (так что файл снова становится пустым), потому что это означает, что файл выполняется в конце. Если есть проблема, тогда файл будет иметь метку времени в файле. и при следующем запуске run.php эта отметка времени поможет мне узнать, была ли ошибка или нет - person user3392106; 02.08.2016