Что такое планировщик задач в PHP?
Планировщик задач (task scheduler) — это инструмент для автоматизации выполнения повторяющихся операций в PHP-приложениях. В отличие от CRON, который управляется на уровне сервера, библиотеки для PHP позволяют гибко задавать расписание прямо в коде проекта, интегрируя задачи с бизнес-логикой (например, отправка email-рассылок, очистка кэша, генерация отчетов).
Зачем нужен планировщик задач?
Без планировщика разработчики вынуждены вручную запускать скрипты через CRON, что усложняет управление зависимостями и тестирование. PHP-планировщик решает эти проблемы:
- Гибкость: задачи можно ставить на паузу, менять частоту без правки системных файлов.
- Логирование: встроенные механизмы записи ошибок и выполнения.
- Очереди: интеграция с RabbitMQ, Redis для фоновых задач.
- Тестирование: можно запускать задачи вручную из консоли или через тесты.
Установка
Популярный планировщик — vlucas/phpdotenv (не путать с dotenv) или cron-expression. Однако самый функциональный — symfony/scheduler (от Symfony) или peppeocchi/php-cron-scheduler. Установка через Composer:
composer require peppeocchi/php-cron-schedulerОсновные функции
- Поддержка CRON-выражений:
*/5 * * * *— каждые 5 минут. - Однократные задачи: с точным временем выполнения.
- Условные задачи: запуск только если выполнено условие (например, файл существует).
- Параллельное выполнение: задачи не блокируют друг друга.
- Обработка ошибок: автоматический повтор при сбое.
Пример кода на PHP
require 'vendor/autoload.php';
use GO\Scheduler;
$scheduler = new Scheduler();
// Задача каждые 10 минут
$scheduler->php('/path/to/script.php')
->everyMinute(10)
->output('/tmp/output.log');
// Задача с CRON-выражением
$scheduler->call(function() {
echo "Отправка email...";
})->cron('0 9 * * 1'); // Каждый понедельник в 9 утра
// Условная задача
$scheduler->php('/path/to/report.php')
->daily()
->when(function() {
return file_exists('/tmp/flag.txt');
});
$scheduler->run();
Когда использовать?
Планировщик идеален для:
- Регулярной очистки временных файлов или базы данных.
- Отправки push-уведомлений по расписанию.
- Обновления агрегированных данных (например, рейтингов).
- Интеграции с внешними API (парсинг, синхронизация).
Избегайте использования планировщика для задач, которые требуют мгновенного выполнения — для этого лучше подходят очереди (например, RabbitMQ или Redis).
Заключение
Планировщик задач на PHP — это мощный инструмент для автоматизации рутины. Он особенно полезен в проектах, где CRON-записи на сервере неудобны или требуют частых изменений. Установка через Composer занимает минуту, а гибкие настройки позволяют адаптировать расписание под любые бизнес-процессы.