Cron
Triangle Cron подключает Localzet Cron к жизненному циклу Triangle и создаёт отдельный процесс планировщика. Компонент читает список заданий из конфигурации cron и создаёт экземпляр localzet\Cron для каждой записи с непустыми rule и callback.
Подключение
Заголовок раздела «Подключение»composer require triangle/cronПакет объявляет PHP ^8.1, triangle/engine ^8.1, triangle/events ^1.0 и localzet/cron ^1.0. Для развёртывания используйте совместимый lockfile приложения: установка компонента не делает произвольные новые версии Engine/Server совместимыми со старым Cron.
Конфигурация
Заголовок раздела «Конфигурация»Файл cron.php возвращает список заданий:
return [ [ 'name' => 'refresh-metrics', 'rule' => '* * * * *', 'callback' => static function (): void { refreshMetrics(); }, ],];refreshMetrics() в примере — функция вашего приложения, доступная в процессе Cron. Вместо неё можно передать конкретный callable приложения. Имя задания необязательно, по умолчанию используется пустая строка.
Autoload::start создаёт процесс с именем Cron и числом workers 1 только для команды, которую Engine распознаёт как управляющую. Задания регистрируются в onServerStart этого процесса. Они не создаются заново при каждом HTTP-запросе.
Выполнение
Заголовок раздела «Выполнение»Сам компонент не разбирает cron-выражения и не выполняет задания в отдельной очереди: это делает установленная версия localzet/cron. Время запуска, обработку секунд и ограничения parser сверяйте с документацией именно этой зависимости.
Callback выполняется в процессе планировщика. Долгая блокирующая работа задерживает его event loop; для длительных операций callback должен передавать ограниченное задание отдельному worker через выбранную приложением очередь.
Один worker на один экземпляр приложения не означает единственный scheduler во всём кластере. Если запускаются несколько копий приложения, задание может выполняться в каждой. При необходимости используйте прикладную распределённую блокировку и идемпотентную обработку.
Обновление и ошибки
Заголовок раздела «Обновление и ошибки»Список читается при запуске процесса. Изменение файла не создаёт новые задания в уже работающем scheduler без перезагрузки соответствующего процесса.
Записи без rule или callback пропускаются. Другие значения передаются в Cron без предварительной проверки компонента: ошибка правила или callback может проявиться при регистрации либо выполнении. Перед запуском проверяйте конфигурацию в среде приложения.
Компонент не предоставляет журнал выполнения, retries, историю пропущенных запусков или компенсацию после остановки. Обработку ошибок и результат бизнес-операции задаёт callback приложения.
Точка подключения
Заголовок раздела «Точка подключения»Triangle\Cron\Autoload::start(?string $arg = '', ?localzet\Server $server = null): void реализует AutoloadInterface Engine. Аргумент команды проверяется через Engine Autoload::isManageCommand. Переданный Server не используется как процесс планировщика: при подходящей команде создаётся новый localzet_start(‘Cron’, 1).
В onServerStart читается config('cron', []). Для каждой записи с непустыми rule/callback вызывается конструктор:
new localzet\Cron($task['rule'], $task['callback'], $task['name'] ?? '');Это схема вызова внутри компонента, а не дополнительный код, который нужно повторить в приложении: повтор создаст дублирующиеся задания.
Поля задания
Заголовок раздела «Поля задания»| Поле | Назначение |
|---|---|
| rule | Cron-выражение, передаваемое зависимому планировщику |
| callback | Вызываемый обработчик задания |
| name | Необязательное имя; стандартное значение — пустая строка |
Проверка empty выполняется только для rule и callback. Здесь нет схемы конфигурации, разрешения обработчика через контейнер, timezone на уровне задания или retry policy.
Install
Заголовок раздела «Install»Install копирует конфигурацию компонента в приложение при отсутствии целевого файла. Поставляемая cron-конфигурация — пустой массив. Включение пакета само по себе не создаёт бизнес-заданий.
Связанные API
Заголовок раздела «Связанные API»Создание, удаление и запуск экземпляров Cron относятся к localzet/cron. Компонент Triangle не добавляет публичный реестр задач, CLI управления отдельным заданием или распределённый lock.