Фоновые задачи в PHP без клиента, альтернатива cron?

Суть такая - есть некоторая система (php-приложение), при достижении определенного состояния в ней выполняется некоторая задача на PHP.

Пример: есть список заказов. Условие - если есть недоставленные заказы, у которых осталось менее 30 минут до ориентировочного времени доставки, то необходимо послать оповещение курьеру, что он, возможно, опаздывает.

Самое простое решение, это добавить задачу в cron, раз в минуту запускать скрипт, который будет проверять условие и делать работу. Есть ли здесь альтернативы в современном php?
Смотрел в сторону очередей и серверов задач, gearman, rabbitmq, но там юзкейс, на сколько понимаю немного другой - есть клиент, который прямо отправляет задачу в очередь, а в моем случае клиента нет, есть просто состояние системы, которое триггерит задачу.
Еще вариант - php-демон, в котором в цикле проверять условие и усыплять скрипт на минуту. Но здесь нужно думать об утечках памяти, рестартах демона и т.д.

Неужели в итоге банальный cron здесь самое оптимальное решение?
  • Вопрос задан
  • 2234 просмотра
Пригласить эксперта
Ответы на вопрос 3
gobananas
@gobananas
finishhim.ru
Демоны на php были есть и будут, гуглите:
https://daemon.io/
profyclub.ru/docs/274
Пробуйте, читайте отзывы и т.д. Проблема демонов в том, что к ним нужна ещё какая-никакя, а система мониторинга, работает демон или нет (сервер был перезагружен, выржрал всю память, просто завис и т.д.) и всякие системы автозапуска на случай профилактических работ в ДЦ.

Решение на cron обычно проще и надёжнее, но только в одном случае: есть гарантия что когда скрипт запускается по крону, предыдущий скрипт уже завершил свою работу, иначе падение сервера это просто вопрос времени или стечения обстоятельств.
Ответ написан
sabramovskikh
@sabramovskikh
А чем плох крон? Идеальное решение же, не банальное. Зачем изобретать велосипеды?
Ответ написан
Комментировать
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы