Команда schedule
Задачи по расписанию не перечислены в одном файле — они разбросаны атрибутами
#[Scheduled] по коду. Команда schedule собирает их в
таблицу, показывает расписание каждой и управляет самим планировщиком.
Что запланировано
Действие по умолчанию — именно список, поэтому команду можно вызвать без аргументов:
php call schedule
php call sch list # то же самое[ Scheduled Tasks ]
TASK TRIGGER
MainTaskDigest::sendDaily cron 0 9 * * *
MainTaskCleanup::purgeTemp fixedRate 3600s
MainTaskSync::pullRates fixedDelay 300s
- - - - - - - - - -
[i] 3 task(s) defined.Это единственный способ увидеть расписание целиком: атрибуты живут рядом с методами, и найти их глазами по проекту тем труднее, чем он больше.
| Триггер | Что означает |
|---|---|
cron 0 9 * * * |
По календарю — пять полей, без секунд |
fixedRate 3600s |
Каждый час от начала предыдущего запуска |
fixedDelay 300s |
Через пять минут после завершения предыдущего |
Разница между двумя последними существенна: fixedRate держит частоту, fixedDelay
держит паузу. Подробно — на странице Планировщик.
Список не требует запущенного планировщика
list сканирует проект, а не спрашивает работающий процесс. Поэтому он работает
всегда — и годится, чтобы проверить расписание перед выкладкой или убедиться, что
новая задача вообще подхватилась.
Запуск планировщика
php call sch start # в терминале
php call sch start -d # в фоне
php call sch stop # корректная остановкаПланировщик — один долгоживущий процесс, который следит за временем и запускает задачи по мере наступления сроков. Сами задачи он выполняет отдельно, поэтому долгая задача не сдвигает расписание остальных.
Планировщик один на хост
Второй запуск не создаст второй планировщик: класс защищён блокировкой, как и любой процесс-одиночка. Это защита от двойного срабатывания — иначе после неудачной выкладки или перезапуска задачи выполнялись бы по два раза.
Из этого же следует, что на нескольких серверах планировщик должен работать на одном. Приложение можно масштабировать, планировщик — нет.
Обычно отдельно его не запускают: атрибут #[EnableScheduler] на классе приложения
поднимает планировщик вместе с call run. Отдельный запуск нужен, когда планировщик
живёт своим процессом — в своём контейнере или под супервизором.
Состояние
php call sch status[ Scheduler Status ]
Scheduler Scheduler ● RUNNING
- - - - - - - - - -
PID 52190
State RUNNING
Activity IDLE
Started 2026-08-14 06:40:12
Uptime 7h 55m
Tasks 3Activity показывает, выполняется ли сейчас какая-то задача. IDLE — планировщик
ждёт следующего срока; это нормальное состояние почти всё время.
Если планировщик остановлен, команда скажет прямо:
Scheduler ○ STOPPED
[i] The scheduler is not running.Все действия
| Команда | Что делает |
|---|---|
list |
Все задачи и их расписание (по умолчанию) |
start |
Запуск в терминале |
start -d |
Запуск в фоне |
stop |
Корректная остановка (SIGTERM) |
status |
Состояние, PID, время работы, число задач |
Дальше
- Планировщик —
#[Scheduled], cron,fixedRateиfixedDelay - process — одиночные процессы
- daemon — демоны и флоты воркеров
- run — запуск планировщика вместе с приложением