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