Зачем нужен планировщик задач?
Планировщик задач позволяет автоматизировать выполнение задач по расписанию, например:
- Отправка уведомлений пользователям.
- Архивация данных.
- Периодическая очистка кэшей.
- Резервное копирование.
Как создать планировщик задач на PHP?
Мы будем использовать простой подход с циклом и интервалами времени.
Шаг 1: Проектирование плана задач
Первым делом нужно определиться с тем, какие задачи будут выполняться и по какому графику. Представим, что у нас есть две задачи:
- Ежедневная чистка кеша: выполняется ежедневно в полночь.
- Еженедельная рассылка уведомлений: выполняется еженедельно в воскресенье утром.
Шаг 2: Реализация планировщика
Создадим планировщик задач на PHP с использованием бесконечного цикла и
sleep():
ВыделитьPHP
<?php
// Файл cron.php
// Список задач
$tasks = [
[
'task' => 'clean_cache',
'schedule' => 'daily', // ежедневная задача
'time' => 'midnight', // выполняется в полночь
],
[
'task' => 'send_notifications',
'schedule' => 'weekly', // еженедельная задача
'time' => 'sunday_morning', // выполняется в воскресенье утром
]
];
// Функция для чистки кеша
function clean_cache()
{
echo "Cleaning cache...\n";
// Ваша логика очистки кеша
}
// Функция для рассылки уведомлений
function send_notifications()
{
echo "Sending notifications...\n";
// Ваша логика рассылки уведомлений
}
// Бесконечный цикл планирования задач
while (true) {
foreach ($tasks as $task) {
switch ($task['schedule']) {
case 'daily':
if (date('H:i') == '00:00') {
call_user_func($task['task']);
}
break;
case 'weekly':
if (date('w') == 0 && date('H:i') == '09:00') {
call_user_func($task['task']);
}
break;
}
}
// Пауза на минуту перед следующей проверкой
sleep(60);
}Шаг 3: Запуск планировщика
Для непрерывной работы планировщика нужно запустить сценарий в фоновом режиме. Это можно сделать через командную строку:
ВыделитьBash
nohup php cron.php &Команда
nohup позволяет процессу продолжить работу после выхода из консоли, а знак амперсанда (&) запускает процесс в фоновом режиме.Советы по улучшению
- Логирование: Добавьте ведение журнала выполненных задач для удобства отладки и мониторинга.
- Оптимизация: Рассмотрите возможность разделения задач на подгруппы и задания для параллельного выполнения.
- Исключения: Обрабатывайте исключения и ошибки, возникающие при выполнении задач.
Итог: Теперь у тебя есть готовый планировщик задач на PHP, который позволяет автоматизировать выполнение задач по расписанию.