CLI · Winter Console

Команда daemon

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

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

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

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

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

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

bash
php call daemon list
text
 | [================================= 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.

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

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

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

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

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

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

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

Все действия

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

Дальше

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