Delegate=yes: передача управления контрольными группами службе
Разрешает службе создавать и настраивать контрольные группы внутри своей. Нужен программам, которые сами управляют ресурсами дочерних процессов: средам исполнения контейнеров, менеджерам задач.
Что делает
Без этого параметра systemd считает поддерево своим и может переставить процессы обратно. Это ломает работу таких программ: они рассчитывают, что созданные ими группы останутся на месте.
Параметру можно указать, какие контроллеры делегировать: Delegate=cpu memory pids. Обычным службам он не нужен вовсе.
Где ставится. В секции [Service].
Значения
| Значение | Что происходит |
|---|---|
yes | делегировать все доступные контроллеры. |
cpu memory pids | делегировать только перечисленные. |
no | по умолчанию. |
По умолчанию: no
Пример
Служба, сама управляющая контрольными группами дочерних процессов.
[Service]
Delegate=yes
KillMode=process
ExecStart=/usr/bin/containerd
Такая связка стандартна для сред исполнения контейнеров: они управляют ресурсами сами, а systemd лишь следит за главным процессом.
Типичные ошибки
Обычным службам параметр не нужен и только ослабляет учёт ресурсов.
Делегированное поддерево systemd не ограничивает: ответственность переходит к самой службе.
На смешанной иерархии контрольных групп делегирование работает неполно.
Связанные ошибки
- status=219/CGROUP в systemdКод 219/CGROUP: не удалось создать или настроить контрольную группу службы. Причины на уровне системы и контейнеров.
- Failed with result 'resources'Состояние resources: systemd не смог выделить ресурсы для запуска службы. Чем отличается от кодов 200-й группы и что проверять.
Рядом стоящие параметры
Где важен на практике
Источники
- systemd.resource-control(5)
- Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)