WantedBy= в systemd: включение службы в автозапуск
Указывает цель, в автозапуск которой попадёт unit при включении. Команда включения создаёт ссылку в каталоге цель.wants, и именно она обеспечивает старт при загрузке.
Что делает
Параметр работает только в секции [Install] и только при включении: сам по себе он ничего не делает. Отсюда частая связка ошибок: параметр поставили в [Unit] (не сработает) или забыли выполнить команду включения (ссылки нет).
Для серверных служб цель почти всегда multi-user.target. Для таймеров — timers.target, для сокетов — sockets.target.
Где ставится. Только в секции [Install].
Значения
| Значение | Что происходит |
|---|---|
multi-user.target | обычная цель для серверных служб. |
timers.target | для unit-файлов таймеров. |
sockets.target | для unit-файлов сокетов. |
graphical.target | для служб графического сеанса; на сервере не достигается. |
Пример
Служба в автозапуске и проверка ссылки.
[Install]
WantedBy=multi-user.target
# после правки:
# systemctl daemon-reload
# systemctl enable --now myapp.service
# ls -l /etc/systemd/system/multi-user.target.wants/ | grep myapp
Последняя команда — самая надёжная проверка: если ссылки нет, службы в автозапуске тоже нет.
Типичные ошибки
Параметр в секции [Unit] не применяется: systemd отбросит его как незнакомый, и автозапуска не будет.
Без выполнения команды включения параметр бесполезен: ссылку создаёт именно она.
graphical.target на сервере не достигается — служба не поднимется.
Для сокет-активации в автозапуск ставится сокет, а не служба.
Связанные ошибки
- WantedBy= в неверной секции: автозапуск не работаетПараметр WantedBy= указан в [Unit] вместо [Install]. Служба запускается вручную, но не поднимается после перезагрузки.
- Unit … has no installation config: не включается автозапускsystemctl enable отказывает: в unit-файле нет секции [Install] или WantedBy. Как включить службу в автозапуск правильно.
- Цель не достигнута: служба ждёт target, который не наступаетСлужба не запускается, потому что не достигнута цель из After= или Requires=. Разбор целей multi-user, network-online, graphical.
- Таймер не работает после перезагрузкиТаймер работал, пока его запускали вручную, но после перезагрузки не активен: не выполнено включение или нет WantedBy=timers.target.
Рядом стоящие параметры
Источники
- systemd.unit(5)
- Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)