Cron: начало работы
Cron добавляет расписания в таймеры процесса Localzet Server. Добавьте пакет в приложение и создайте экземпляр задания при старте каждого worker:
composer require localzet/cron:dev-main
Используйте dev-main для исходников под Server 7. Опубликованный stable v1.0.3 рассчитан на Server 4.5; не используйте его с этим примером.
<?php
use localzet\Cron;
use localzet\Server;
require __DIR__ . '/vendor/autoload.php';
$server = new Server('http://127.0.0.1:8080');
$server->count = 1;
$server->onWorkerStart = static function (): void {
new Cron('*/10 * * * * *', static function (): void {
echo date(DATE_ATOM) . " scheduled task\n";
}, 'ten-second-heartbeat');
};
Server::runAll();
Это расписание с шестью полями срабатывает каждые десять секунд. Для обычного cron используйте пять полей (минута час день месяц день-недели); шестое поле задаёт секунды. Сервер намеренно слушает только loopback, а count = 1 исключает дублирование задания между workers в этом примере.
Проверьте расписание
$parser = new \localzet\CronParser();
if (!$parser->isValid('0 */5 * * *')) {
throw new InvalidArgumentException('Invalid schedule');
}
$nextTimes = $parser->parse('0 */5 * * *');
parse() возвращает рассчитанные Unix timestamps; задайте нужный timezone приложения до расчёта. Тесты проекта: composer test и composer lint. Планировщик работает в памяти каждого процесса и не является распределённым scheduler — для глобально единственного запуска используйте один экземпляр или внешнюю блокировку.

