Автозапуск настроен ссылкой вручную
Команда включения делает больше, чем просто ссылку: она учитывает Also=, Alias=, наборы предустановок и записывает состояние так, как ожидают остальные команды. Ссылка, созданная вручную, работает, но состояние включения может отображаться неверно.
Вероятные причины
По порядку: сверху то, что встречается чаще.
-
Ссылка создана вручную с неверным путём
Относительная ссылка или ссылка на несуществующий файл выглядит правдоподобно, но unit не запускается.
-
Не учтены связанные unit
При
Also=команда включения поднимает и сокет, и таймер. Ручная ссылка включает только один unit. -
Состояние включения показывается неверно
Команда проверки состояния смотрит и на ссылки, и на наборы предустановок. Ручное вмешательство даёт расхождение между «ссылка есть» и «состояние disabled».
Диагностика
Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.
Состояние автозапуска по мнению systemd.
systemctl is-enabled myapp.serviceБитые ссылки, оставшиеся от ручных правок.
sudo find /etc/systemd/system -xtype lВсе связанные unit и их состояния.
systemctl list-unit-files "myapp*"Решение
Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.
- Почему происходит
- Относительная ссылка или ссылка на несуществующий файл выглядит правдоподобно, но unit не запускается.
- Как проверить
-
Посмотрите ссылки в каталоге цели.
ls -l /etc/systemd/system/multi-user.target.wants/ | grep myapp sudo find /etc/systemd/system -xtype l
- Как исправить
-
Удалите ручную ссылку и выполните обычное включение:
systemctl enable myapp.service.
- Почему происходит
- При
Also=команда включения поднимает и сокет, и таймер. Ручная ссылка включает только один unit.
- Как проверить
-
Посмотрите состояние всех связанных unit.
systemctl is-enabled myapp.service myapp.socket myapp.timer 2>/dev/null
- Как исправить
- Включите через команду: она разберётся со связями сама.
- Почему происходит
- Команда проверки состояния смотрит и на ссылки, и на наборы предустановок. Ручное вмешательство даёт расхождение между «ссылка есть» и «состояние disabled».
- Как проверить
-
Сравните состояние и наличие ссылки.
systemctl is-enabled myapp.service; ls -l /etc/systemd/system/*.wants/myapp.service 2>/dev/null
- Как исправить
-
Приведите состояние в порядок:
systemctl disableзатемsystemctl enable.
Пример вывода
Ссылка есть, но ведёт в никуда. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.
$ ls -l /etc/systemd/system/multi-user.target.wants/myapp.service
lrwxrwxrwx 1 root root 34 Sep 10 11:20 myapp.service -> ../myapp.service
$ sudo find /etc/systemd/system -xtype l
/etc/systemd/system/multi-user.target.wants/myapp.service
Связанные ошибки
- Unit … has no installation config: не включается автозапуск systemctl enable отказывает: в unit-файле нет секции [Install] или WantedBy. Как включить службу в автозапуск правильно.
- Unit … not found: unit-файл не найден Сообщение Unit not found при запуске службы: файла нет, не выполнен daemon-reload, опечатка в имени или не указано расширение.
- WantedBy= в неверной секции: автозапуск не работает Параметр WantedBy= указан в [Unit] вместо [Install]. Служба запускается вручную, но не поднимается после перезагрузки.
- Unit is masked: служба запрещена к запуску Сообщение Unit is masked: unit заблокирован ссылкой на /dev/null. Как найти и снять маскировку.
- Apache: Invalid command — не включён модуль Apache не запускается: директива требует модуль, который не подключён. Как найти нужный модуль и включить.
- Apache: правила .htaccess не действуют Файл .htaccess игнорируется: запрещён параметром AllowOverride, нет нужного модуля, файл не читается.
- Configuration file is marked executable Предупреждение о правах: unit-файл помечен исполняемым. Откуда берётся и почему это стоит исправить.
- Configuration file is marked world-inaccessible Предупреждение о правах на unit-файл: служба работает, но файл недоступен для чтения другим.
Источники
-
systemctl(1)
Команды enable, disable, preset и работа со ссылками. -
Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
Проверено ручной ссылкой с относительным путём: unit не запускается.