ghost404
@ghost404
PHP Developer

Есть ли толковые аналоги планировщика заданий AT?

Вот уже некоторое время пытаюсь найти информацию по теме, но пока безрезультатно.

Задача следующая.
Есть веб-приложение которое написано на PHP и крутится на Linux сервере. Все как обычно.
Задача в том что мне нужно выполнять какие-то задания по расписанию. Но выполнять эти задания не регулярно, а единожды и управлять мне этим нужно через мое приложение.

Например, у меня есть механизм отложенной публикации новостей. Редактор создает новость и указывает в какой день и в какое время эту новость нужно опубликовать. Сейчас я при выборке проверяю дату публикации, но это не лучшее решение.

Зная дату публикации, мне просто нужно запустить скрипт в заданное время, который опубликует новость.

Использовать cron для этих целей не разумно, ибо он будет дергать приложение в 99% случаев в холостую. Из всего что я смог нарыть это утилита at. Вроде как она делает именно то что мне надо.

Планирование запуска может иметь вид:

shell_exec('at php news_publisher.php 12345 -t 201710271030');


Вроде все просто, но как-то костыльно мне кажется. Я не уверен что это можно использовать в бою. Кто знает, на сколько это решение надежно и стабильно? Что будет если сервер перезагрузится, расписание останется? Что если сервер будет отключен некоторое время и после запуска выяснится что он пропустил несколько тасков. Он их выполнит?

Может есть какие-то более стабильные и удобные решения? Или нужно писать свою реализацию?

Еще одной проблемой будет, если редактор изменит время публикации новости. Получается я должен удалить старый таск и поставить новый. Для этого придется хранить где-то список id тасков.

В общем я пока не нашел решения. Может у вас есть идеи какие?
  • Вопрос задан
  • 385 просмотров
Пригласить эксперта
Ответы на вопрос 2
@BorisKorobkov Куратор тега PHP
Web developer
cron - вполне разумное решение. Запускать каждую минуту необязательно - достаточно каждый час или еще реже.
Даже если он сработает вхолостую, то нагрузка от единственного запроса по индексированным полям "опубликуй все неопубликованные статьи, у которых дата публикации уже наступила" будет близка к нулю.
Ответ написан
leahch
@leahch Куратор тега Linux
3D специалист. Dолго, Dорого, Dерьмово.
Еще порекомендую celery, он хоть и написан на python, но для него есть клиент под PHP
www.celeryproject.org и https://github.com/gjedeer/celery-php
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы