Localzet Server and Cluster documentation

Cron: API и эксплуатация

Требуются PHP 8.1+ и Localzet Server ^7.0.

Расписание

Поддерживаются пять полей минута час день-месяца месяц день-недели и шесть полей с ведущими секундами. Парсер обрабатывает *, списки через запятую, диапазоны и шаг вида */5; сложные сочетания проверяйте через CronParser.

$parser = new \localzet\CronParser();
$valid = $parser->isValid('*/15 * * * * *');
$timestamps = $parser->parse('*/15 * * * * *', time());

parse($expression, $startTime) проверяет календарные поля времени и возвращает timestamps секунд, подходящих в текущем минутном интервале. Это не поиск ближайшего совпадения на произвольный будущий период. Для пяти полей используется секунда 0; без аргумента расчёт начинается от текущего времени процесса. Задайте timezone PHP до создания расписаний и тестируйте календарные переходы, если они важны для задачи.

Управление заданиями

$job = new \localzet\Cron('0 * * * *', $callback, 'hourly-task');
$id = $job->getId();
$jobs = \localzet\Cron::getAll();
$job->destroy();
\localzet\Cron::remove($id);

Конструктор регистрирует callback, а таймер планирует последующие вызовы. getRule(), getCallback(), getName() и getId() возвращают параметры экземпляра. Callback исполняется в event loop и должен быть коротким и неблокирующим; тяжёлую работу передавайте очереди.

Модель запуска и проверка

Каждый worker имеет собственную память и собственные таймеры. Если одинаковое задание создаётся в каждом worker, оно выполняется в каждом процессе. Для единственного глобального запуска используйте один worker планировщика или внешнюю блокировку/очередь. Проверки репозитория: composer test валидирует граничные шаги и timer callback, composer lint проверяет PHP синтаксис. Они не являются испытанием календарной семантики, часовых поясов и DST.