Как сделать разовое выполнение задачи в заданное время?
Добрый день!
Какие есть инструменты для выполнение разовых однотипных задач в заданное время?
Пример из жизни в общих чертах:
Покупатель оформляет предварительный заказ в службе доставки магазина, который в данный момент закрыт. Уведомление о заказе по смс уходит в никуда, т.к. по различным причинам, не зависящим от разработчика, исполнитель может игнорировать заказы, которые валились к нему ночью.
Магазинов и исполнителей много и время работы у всех разное.
Нужно каким-то образом делать отложенное уведомление в заданное время.
Например, В 9:00 выслать смс с заказом №1 Василию, а в 11:23 заказ №4 Петровичу.
Не уверен, что cron срипт, выполняющий проверку каждую минуту и сверяющий время заказа со временем открытия заведения, хорошее решение.
Надеюсь на ваш опыт решения подобных задач, заранее спасибо)
Решал похожую задачу как раз через cron скрипт и сверку времени), при это задача кладется в специальную таблицу в БД с указанием времени когда ее "запустить".
Не считаю что данное решение совсем уж плохое, и вот почему:
1. Никакой менеджер сообщений не поддерживает в стабильной ветки отложенные сообщения, т.к. протокол AMQP в приципе не поддерживает отложенную доставку
2. Решение через cron абсолютно стабильно по сравнению с отдельным php-демоном: вероятность падения crond практически нулевая.
3. Простота отладки (по сравнению с отдельным php демоном).
4. Практически "искаробочная" интеграция очереди заявок/сообщений с админкой сайта.
В принципе со всеми пунктами согласен.
Просто полагаю, что должны же быть коробочные решения, чтобы не городить специальных таблиц)
Вот, например, есть же at https://ru.wikipedia.org/wiki/At
Гуглю как раз сейчас на тему его использования для запуска пхп скриптов
Zohei: можно совместить. Записываем задачу в специальную таблицу, потом запускаем at. В заданное время at отправляет смс и отчитывается об этом в той же таблице. Таким образом мы совместим возможность мониторинга очереди сообщений и экономию ресурсов по сравнению с cron.