Вот уже некоторое время пытаюсь найти информацию по теме, но пока безрезультатно.
Задача следующая.
Есть веб-приложение которое написано на PHP и крутится на Linux сервере. Все как обычно.
Задача в том что мне нужно выполнять какие-то задания по расписанию. Но выполнять эти задания не регулярно, а единожды и управлять мне этим нужно через мое приложение.
Например, у меня есть механизм отложенной публикации новостей. Редактор создает новость и указывает в какой день и в какое время эту новость нужно опубликовать. Сейчас я при выборке проверяю дату публикации, но это не лучшее решение.
Зная дату публикации, мне просто нужно запустить скрипт в заданное время, который опубликует новость.
Использовать cron для этих целей не разумно, ибо он будет дергать приложение в 99% случаев в холостую. Из всего что я смог нарыть это утилита
at. Вроде как она делает именно то что мне надо.
Планирование запуска может иметь вид:
shell_exec('at php news_publisher.php 12345 -t 201710271030');
Вроде все просто, но как-то костыльно мне кажется. Я не уверен что это можно использовать в бою. Кто знает, на сколько это решение надежно и стабильно? Что будет если сервер перезагрузится, расписание останется? Что если сервер будет отключен некоторое время и после запуска выяснится что он пропустил несколько тасков. Он их выполнит?
Может есть какие-то более стабильные и удобные решения? Или нужно писать свою реализацию?
Еще одной проблемой будет, если редактор изменит время публикации новости. Получается я должен удалить старый таск и поставить новый. Для этого придется хранить где-то список id тасков.
В общем я пока не нашел решения. Может у вас есть идеи какие?