Перейти к содержимому
EVI Solutions

Служба systemd не запускается: как найти причину

Средне 15 мин Обновлено:

Краткий ответ

Когда служба systemd не запускается, сначала проверьте статус командой `systemctl status имя-службы` и просмотрите журналы с помощью `journalctl -u имя-службы`. Причиной может быть ошибка в конфигурации, отсутствующий файл, неправильные разрешения или неудачная зависимость. Следуйте шагам для систематической диагностики.

Как проявляется проблема

  • Служба находится в состоянии failed или inactive
  • Запуск службы возвращает ошибку
  • Служба запускается и сразу падает
  • Приложение на порту не отвечает
  • В журналах появляются сообщения об ошибке

Частые причины

Ошибка в конфигурации службы

Неправильный unit-файл, неверный путь к исполняемому файлу или отсутствующие параметры препятствуют запуску.

Отсутствующие разрешения или владелец

У службы может не быть прав на чтение конфигурации, запись в каталог или доступ к сети.

Зависимость не выполнена

Служба зависит от другой службы, сети или монтирования диска, которые недоступны в момент запуска.

Порт занят

Другое приложение уже использует порт, который служба пытается занять.

Отсутствующие файлы или библиотеки

Исполняемый файл, конфигурационный файл или разделяемая библиотека не существуют в ожидаемом месте.

Пошаговое решение

  1. 1

    Проверьте статус службы

    Выполните systemctl status имя-службы. Обратите внимание на состояние (failed, inactive) и последние сообщения об ошибке. Статус часто дает первую подсказку о причине.

  2. 2

    Просмотрите журналы

    Используйте journalctl -u имя-службы -xe для подробных журналов. Опция -e переходит к концу, а -x дает пояснения. Если служба недавно упала, добавьте --since "10 min ago".

  3. 3

    Проверьте unit-файл

    Выполните systemctl cat имя-службы, чтобы увидеть содержимое unit-файла. Убедитесь, что пути к исполняемому файлу и конфигурации верны и нет синтаксических ошибок.

  4. 4

    Протестируйте исполняемый файл вручную

    Выполните команду из ExecStart вручную от имени пользователя, указанного в User=. Если вручную работает, проблема в окружении службы (переменные, разрешения).

  5. 5

    Проверьте разрешения и владельца

    Убедитесь, что пользователь службы имеет права на чтение и запись в необходимые каталоги. Используйте ls -l и namei -l для проверки пути.

  6. 6

    Проверьте зависимости

    Выполните systemctl list-dependencies имя-службы. Убедитесь, что все зависимости активны. Можно вручную запустить зависимую службу и повторить попытку.

  7. 7

    Проверьте, занят ли порт

    Используйте sudo ss -tulnp | grep :PORT, чтобы увидеть, какой процесс держит порт. Если он занят, проверьте, что это за процесс, и остановите его только если это безопасно, или измените порт в конфигурации.

  8. 8

    Перезагрузите systemd и запустите службу

    После изменения unit-файла выполните systemctl daemon-reload, затем systemctl start имя-службы. Снова проверьте статус.

Если ничего не помогает

Если служба по-прежнему не запускается, проверьте, нет ли ограничения ресурсов (например, LimitNOFILE) или SELinux/AppArmor. Если вы тестируете SELinux, временно переведите его в режим permissive (setenforce 0) только на тестовой системе и сразу верните в режим enforcing (setenforce 1); не отключайте защиту навсегда на производственной системе. Посмотрите также системные журналы (journalctl -b) на предмет ошибок, не связанных напрямую со службой. Для сложных случаев запустите команду из ExecStart под strace -f, чтобы увидеть, где она останавливается.

Как избежать повторения

  • Регулярно обновляйте systemd и службы
  • Используйте `systemd-analyze verify` для проверки unit-файлов
  • Настройте мониторинг ключевых служб
  • Ведите учет изменений конфигурации

Когда лучше обратиться к специалисту

Если вы испробовали все шаги, а служба все еще не работает, или если у вас нет доступа к учетной записи root, обратитесь в ИТ-поддержку. Они смогут глубже проанализировать систему и безопасно применить продвинутые методы.

Обслуживание ИТ-инфраструктуры · Серверы, сети, резервное копирование, безопасность и helpdesk

Частые вопросы

Как посмотреть все журналы для службы?

Используйте `journalctl -u имя-службы` без опции `-e`, чтобы увидеть все записи. Можно добавить `-f`, чтобы следить за журналами в реальном времени.

Что означает ошибка "status=203/EXEC"?

Она указывает, что systemd не смог выполнить команду из `ExecStart`. Проверьте путь, разрешения и наличие файла.

Как изменить пользователя, от имени которого выполняется служба?

Измените `User=` в unit-файле (лучше через `systemctl edit имя-службы`), затем выполните `systemctl daemon-reload` и перезапустите службу.

Поделиться
Не нашли решение?ИИ-помощник работает 24/7. Опишите проблему или отправьте скриншот ошибки и получите инструкцию для вашего случая.Спросить ИИ-помощника