CLI · Winter Console

Команда daemon

Демон — не один процесс, а флот: супервизор и его воркеры. Команда daemon управляет флотом целиком и показывает каждого воркера отдельно — в каком он состоянии, сколько работает и сколько раз перезапускался.

Алиас call dmnДействия list · start · stop · statusПоказывает флот по воркерам

Чем отличается от process

process управляет одиночной задачей, daemon — долгоживущим компонентом, у которого есть подчинённые воркеры, политика перезапуска и масштабирование. Отсюда и разница в выводе: у процесса один PID, у демона — супервизор плюс таблица слотов.

Команды намеренно разделены: демон в списке процессов не появится, и наоборот. Что такое демоны и как их писать — на странице Демоны.

Что есть в проекте

bash
php call daemon list
php call dmn list           # то же самое
text
[ 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.

Запуск и остановка

bash
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 останавливает весь флот: супервизор перестаёт поднимать новых воркеров и даёт работающим доработать текущую задачу. Отдельный воркер отдельно не убивают — этим занимается сам супервизор.

Состояние флота

bash
php call dmn main.daemon.Queue status
text
[ 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 при растущей очереди — повод смотреть не на демона, а на источник задач.

Ресурсы супервизора

bash
php call dmn main.daemon.Queue status -v

Флаг добавляет потребление ресурсов супервизора — пользователя, PPID, CPU, память, время работы. Ресурсы отдельных воркеров команда не показывает: их PID видны в таблице, и по ним смотрят системными средствами.

Все действия

Команда Что делает
list Все демоны проекта, состояние и число воркеров
<Класс> Супервизор на переднем плане
<Класс> start -d Супервизор в фоне
<Класс> stop Корректная остановка всего флота
<Класс> status Состояние плюс таблица воркеров
<Класс> status -v Дополнительно ресурсы супервизора

Дальше

  • Демоны — как писать демонов, политики перезапуска и масштабирования
  • process — одиночные процессы
  • schedule — задачи по расписанию
  • run — запуск демонов вместе с приложением