Каков наилучший способ запустить непрерывный цикл в php, который запускается, только если он еще не запущен? - PullRequest
0 голосов
/ 09 октября 2019

Стек LAMP в Ubuntu 18.04:

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

Я видел способы запуска cron каждую минуту, которые создают файл, а затем удаляют его, когда он готов, но что происходит, когда выполнение скрипта занимает 61 секунду, а затем он просто сидит и ничего не делает в течение 59 секунд. Или, если сценарий завершается сбоем и не удаляет файл.

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

Ответы [ 2 ]

0 голосов
/ 09 октября 2019

Мне кажется, что вы хотите заново изобрести модель, управляемую событиями, используя apache и mod_php, которые не созданы для моделей, управляемых событиями. Если вы хотите придерживаться php, я бы предложил запустить в консоли скрипт php_cli (не относящийся к Apache) (возможно, в качестве службы systemd). При запуске он должен убедиться, что он еще не запущен. Или вы можете использовать файл .lock или .pid.

0 голосов
/ 09 октября 2019

«Проверить, существует ли файл» - это подход «хорошо» ... Вы можете заменить его строкой в ​​некоторой базе данных, используя ту же логику.

Вы можете избежать проблемы тайм-аута, проверив, еслидата файла (или дата записи в базе данных) старше 1 минуты. Если это так, то последнему процессу не удалось удалить файл, и вы можете сделать это и запустить процесс заново.

...