Команда daemon
Демон — не один процесс, а флот: супервизор и его воркеры. Команда
daemon управляет флотом целиком и показывает каждого воркера
отдельно — в каком он состоянии, сколько работает и сколько раз перезапускался.
Чем отличается от process
process управляет одиночной задачей, daemon — долгоживущим компонентом, у
которого есть подчинённые воркеры, политика перезапуска и масштабирование. Отсюда и
разница в выводе: у процесса один PID, у демона — супервизор плюс таблица слотов.
Команды намеренно разделены: демон в списке процессов не появится, и наоборот. Что такое демоны и как их писать — на странице Демоны.
Что есть в проекте
php call daemon list | [================================= Daemon =================================]
| [ Available Daemons ]
| [D] Main.Daemon.QueueDaemon ............ [● RUNNING] [idle] [w:4] 7h 52m
| [D] Main.Daemon.NotifyDaemon ........................... [○ STOPPED]
| - - - - - - - - - - - - - - - - - - - - - - -
| [i] 2 defined, 1 running.
| [ Available Daemons ]
| [================================= Daemon =================================][w:4] — сколько воркеров держит флот прямо сейчас.
Класс указывается точечной записью: main.daemon.QueueDaemon соответствует
Main\Daemon\QueueDaemon.
Запуск и остановка
php call daemon main.daemon.Queue # supervise in foreground
php call daemon main.daemon.Queue start -d # detached
php call daemon main.daemon.Queue stop # graceful stop of the whole fleetНа переднем плане супервизор занимает терминал — удобно при отладке: видно, как
поднимаются воркеры и что они пишут. С -d флот уходит в фон, команда печатает PID
супервизора.
stop останавливает весь флот: супервизор перестаёт поднимать новых воркеров и
даёт работающим доработать текущую задачу. Отдельный воркер отдельно не убивают —
этим занимается сам супервизор.
Состояние флота
php call daemon main.daemon.Queue status | [================================= Daemon =================================]
| [ Daemon Status ]
| Main.Daemon.Queue ........................................... [Daemon ● RUNNING]
| - - - - - - - - - - - - - - - - - - - - - - -
| PID 51024
| State RUNNING
| Activity BUSY
| Started 2026-08-14 06:40:11 +00:00
| Uptime 7h 52m
| Workers 4
| Restarts 2
| - - - - - - - - - - - - - - - - - - - - - - -
| [ Workers (4) ]
| SLOT PID STATE ACT UPTIME RESTARTS
| #0 51031 running busy 7h 52m 0
| #1 51032 running idle 7h 52m 0
| #2 58840 starting idle — 2
| #3 51034 retiring busy 7h 52m 0
| [ Daemon Status ]
| [================================= Daemon =================================]Поле Restarts у демона — сколько раз супервизор поднимал воркеров заново; у
конкретного слота — сколько раз перезапускался именно он. Слот с растущим счётчиком
при нулевых у соседей означает, что падает конкретная задача, а не демон.
Состояния воркера
| Состояние | Что происходит |
|---|---|
starting |
Поднимается, к работе ещё не приступил |
running |
Работает штатно |
retiring |
Выводится из строя штатно: новую работу не берёт, текущую доделывает |
killing |
Не завершился по-хорошему — снимается принудительно |
restarting |
Завершился и поднимается заново по политике перезапуска |
empty |
Слот свободен — воркера в нём сейчас нет |
Колонка ACT — то же, что у процессов: busy означает полезную работу прямо
сейчас, idle — ожидание. Флот из четырёх idle при растущей очереди — повод
смотреть не на демона, а на источник задач.
Ресурсы супервизора
php call daemon main.daemon.Queue status -vФлаг добавляет потребление ресурсов супервизора — пользователя, PPID, CPU, память, время работы. Ресурсы отдельных воркеров команда не показывает: их PID видны в таблице, и по ним смотрят системными средствами.
Все действия
| Команда | Что делает |
|---|---|
list |
Все демоны проекта, состояние и число воркеров |
<Класс> |
Супервизор на переднем плане |
<Класс> start -d |
Супервизор в фоне |
<Класс> stop |
Корректная остановка всего флота |
<Класс> status |
Состояние плюс таблица воркеров |
<Класс> status -v |
Дополнительно ресурсы супервизора |