BindsTo= и PartOf=: связанная жизнь unit
BindsTo= жёстче Requires=: служба останавливается, как только указанный unit перестаёт быть активным, по любой причине. PartOf= передаёт только команды остановки и перезапуска, но не запуска.
Что делает
BindsTo= полезен для привязки к устройству или точке монтирования: пропало устройство — служба остановилась, а не работает вслепую. PartOf= нужен для групп служб: остановка цели останавливает всех участников, но запуск каждый решает сам.
Где ставится. В секции [Unit].
Значения
| Значение | Что происходит |
|---|---|
BindsTo=dev-ttyUSB0.device | служба живёт только пока устройство подключено. |
PartOf=myapp.target | остановка и перезапуск цели затрагивают эту службу. |
Пример
Группа служб под одной целью.
# в каждой службе группы
[Unit]
PartOf=myapp.target
After=myapp.target
# в цели
[Unit]
Description=Все части myapp
Wants=myapp-api.service myapp-worker.service
Теперь systemctl restart myapp.target перезапускает все части, а падение одной не роняет остальные.
Типичные ошибки
BindsTo= останавливает службу и при штатном завершении зависимости — это часто оказывается неожиданным.
PartOf= не запускает службу вместе с целью: для этого нужен Wants= со стороны цели.
Оба параметра требуют After= для порядка, как и обычные зависимости.
Связанные ошибки
- Dependency failed for … и результат 'dependency'Сообщение Dependency failed for: служба не запускалась, потому что упала её зависимость. Как найти настоящего виновника.
- signal=TERM (status=15/TERM) в systemdПроцесс службы завершён сигналом TERM. Когда это нормальная остановка, а когда признак проблемы.
Рядом стоящие параметры
Источники
- systemd.unit(5)
- Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)