PHP: Планировщик задач (Cron)

PHP
Планировщик задач (Cron) — это инструмент для автоматического выполнения задач по расписанию. В операционной системе Unix-like (Linux, macOS) для этого используется служба cron, но что делать, если нужно реализовать расписание задач прямо в приложении на PHP? Рассмотрим, как построить собственный планировщик задач на PHP.

Зачем нужен планировщик задач?


Планировщик задач позволяет автоматизировать выполнение задач по расписанию, например:
  • Отправка уведомлений пользователям.
  • Архивация данных.
  • Периодическая очистка кэшей.
  • Резервное копирование.

Как создать планировщик задач на PHP?


Мы будем использовать простой подход с циклом и интервалами времени.

Шаг 1: Проектирование плана задач
Первым делом нужно определиться с тем, какие задачи будут выполняться и по какому графику. Представим, что у нас есть две задачи:
  • Ежедневная чистка кеша: выполняется ежедневно в полночь.
  • Еженедельная рассылка уведомлений: выполняется еженедельно в воскресенье утром.

Шаг 2: Реализация планировщика
Создадим планировщик задач на PHP с использованием бесконечного цикла и sleep():
<?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: Запуск планировщика
Для непрерывной работы планировщика нужно запустить сценарий в фоновом режиме. Это можно сделать через командную строку:
nohup php cron.php &

Команда nohup позволяет процессу продолжить работу после выхода из консоли, а знак амперсанда (&) запускает процесс в фоновом режиме.

Советы по улучшению


  • Логирование: Добавьте ведение журнала выполненных задач для удобства отладки и мониторинга.
  • Оптимизация: Рассмотрите возможность разделения задач на подгруппы и задания для параллельного выполнения.
  • Исключения: Обрабатывайте исключения и ошибки, возникающие при выполнении задач.

Итог: Теперь у тебя есть готовый планировщик задач на PHP, который позволяет автоматизировать выполнение задач по расписанию.

Автор:  03.12.2025 08:56:22 pm