Как надежно запускать пакетное задание каждые 5 секунд?
Я создаю приложение, в котором отправка всех уведомлений (электронная почта, SMS, факс) будет асинхронной. Приложение запишет уведомления в базу данных, а пакетное задание прочитает эти уведомления и отправит их с соответствующим транспортом.
Сначала я читал о способах запуска cron быстрее, чем за минуту, и понял, что это плохая идея.
Пакетные сценарии написаны на PHP, и я полагаю, что написание правильного демона было бы довольно трудоемким делом (хотя я открыт для любых предложений, так как машина PHP работает также бесконечно).
Я имею в виду решение, которое бы:
- Запускать скрипт PHP каждые 5 секунд
- Убедитесь, что предыдущий запуск завершен или прерван (никогда не выполняется 2 одновременных пакета)
- Убить сценарий, если жить дольше, чем
x
минут (безопасность на случай зависания) - Начните с системы (если происходит перезагрузка)
есть идеи как это сделать?
1 ответ
Такое ощущение, что вы пытаетесь использовать неправильную архитектуру / инструмент для работы, и, возможно, вам следует изучить использование очереди сообщений. beanstalkd имеет несколько доступных библиотек PHP и будет блокировать чтение очереди. В этом вопросе StackOverflow есть несколько советов о том, как поступить.