#Что означает проблема и кому подходит инструкция
Рассматривается служба systemd в Ubuntu, которую удаётся запустить командой systemctl start, но после перезагрузки она остаётся inactive или failed. Для службы пользователя (--user) порядок другой: это выясняется на первом шаге. На сервере с единственным SSH-доступом заранее обеспечьте запасную консоль.
#Возможные причины и отличительные признаки
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Служба не включена в автозагрузкуstart запускает процесс сейчас, enable создаёт правила старта в следующую загрузку. | is-enabled выводит disabled. | Проверить [Install] и включить только нужный unit. |
| Проблема только при загрузкеНужный диск, сеть или другой unit ещё недоступны. | В журнале предыдущей загрузки видны ошибки времени, сети или путей. | Сравнить журнал загрузки и параметры зависимостей. |
| Служба не запускается в системе от нужного пользователяУ пользовательских юнитов отдельное управление и сеанс. | В системном списке сервиса нет, но systemctl --user его показывает. | Проверить пользовательский менеджер и жизненный цикл сеанса. |
#Диагностика и пошаговое устранение
- 1. Определите имя службы и вид её запускаОткройте «Терминал» сочетанием Ctrl+Alt+T или подключитесь к серверу по SSH. Замените
ИМЯ.serviceна настоящее имя из сообщения об ошибке илиsystemctl list-unit-files --type=service. Не вводите русское слово ИМЯ буквально. Выполните проверку состояния.Loaded: not-foundозначает, что имя неверное или пакет отсутствует; приactiveсразу после ручного запуска всё равно требуется проверить включение автозагрузки.Linux · Терминал (Bash)КомандаКоманды для системной службы; просмотр без повышения прав.systemctl status ИМЯ.service --no-pagersystemctl is-enabled ИМЯ.service
- 2. Сравните ручной старт и причины сбоя загрузкиЕсли служба сейчас остановлена, запускать её следует только понимая её роль: старт базы данных или веб-сервера может повлиять на пользователей. Для безопасной диагностики сначала посмотрите записи именно текущей загрузки и предыдущей (
-b -1доступно при сохранённом журнале). Сравните время ошибки, сообщениеFailed, путь к файлу и кодstatus=. Если предыдущих записей нет, фиксируйте ошибку при следующей контролируемой загрузке. - Если журнал доступен только администратору, используйте sudo перед каждой командойLinux · Терминал (Bash)КомандаЕсли журнал доступен только администратору, используйте sudo перед каждой командой.
journalctl -u ИМЯ.service -b --no-pager -n 80journalctl -u ИМЯ.service -b -1 --no-pager -n 80
- 3. Проверьте, откуда systemd читает настройкиВыполните
systemctl cat, чтобы увидеть основной unit и дополнительные файлы. Найдите[Install]иWantedBy=; если раздела нет, unit может быть статическим и запускаться через другой объект. ПосмотритеAfter=,Requires=,Wants=,WorkingDirectory=,ExecStart=. Не считайте наличиеAfter=network.targetгарантией готовности Интернета.Linux · Терминал (Bash)КомандаТолько просмотр; проверьте реальные имена зависимостей.systemctl cat ИМЯ.servicesystemctl show ИМЯ.service -p FragmentPath -p DropInPaths -p UnitFileState -p After -p Wants
- 4. Включите автозагрузку, если служба управляемаяТолько когда
is-enabledпоказывает disabled и в unit предусмотрен корректный раздел [Install], включите службу командойsudo systemctl enable ИМЯ.service. Это изменяет ссылки в /etc/systemd/system, но само по себе не запускает процесс. Сначала сохраните текстsystemctl catи убедитесь, что не включаете экспериментальную или конфликтующую службу. Статусstaticне лечится принудительным добавлением WantedBy без знания зависимостей.Linux · Терминал (Bash)С осторожностьюНужен sudoАдминистратор; ожидается enabled. Откат: sudo systemctl disable ИМЯ.service.sudo systemctl enable ИМЯ.servicesystemctl is-enabled ИМЯ.serviceКоманда может изменить состояние системы или её настройки. Проверьте параметры и последствия перед запуском.
- 5. Исправьте только подтверждённую зависимостьЕсли журнал подтверждает, что служба стартует раньше смонтированного диска, проверьте
findmntиRequiresMountsFor=в документации systemd; если причина в сети, выясните, какая служба действительно ожидает online. Для локального собственного unit используйтеsudo systemctl edit ИМЯ.service, создайте изменение в [Unit] и только по подтверждённой причине. Не копируйтеAfter=network-online.targetво все службы и не изменяйте файлы в /usr/lib напрямую.Linux · Терминал (Bash)КомандаДиагностика порядка старта; если команды нет, сначала проверьте systemd.systemctl list-dependencies ИМЯ.servicesystemd-analyze critical-chain ИМЯ.service
- 6. Проверьте повторный запуск без потери доступаПосле корректировки выполните
systemctl statusиis-enabled, затем согласуйте перезагрузку на время, когда остановка безопасна. После неё повторите команды и проверьте конкретную функцию службы (например, ответ приложения, запись в журнале). Если опять failed, сохранитеjournalctl -b -uи откатите последнее изменение черезsudo systemctl revert ИМЯ.serviceтолько если созданные вами drop-in файлы можно удалить без потери чужих изменений.Linux · Терминал (Bash)КомандаПерезагрузка выполняется отдельно после согласования остановки сервиса.systemctl status ИМЯ.service --no-pagersystemctl is-enabled ИМЯ.servicejournalctl -b -u ИМЯ.service --no-pager -n 40
#Как убедиться, что неисправность устранена
Исправление подтверждено, когда без ручного start после новой загрузки unit находится в ожидаемом состоянии и его реальная функция работает. Если unit является oneshot, состояние inactive (dead) после успешного завершения может быть нормальным — проверяйте код последнего запуска и результат задания.
#Если результат не получен
Не повторяйте опасные действия наугад. Сохраните точную формулировку ошибки, вывод диагностики без секретов, версию Ubuntu и данные о затронутом компоненте. Верните лишь собственные изменения из резервной копии; если затронута загрузка, диски или рабочий сервер, воспользуйтесь консолью восстановления либо помощью администратора.