#Что означает ошибка
Служба не запускается
Если systemctl status показывает failed или activating (auto-restart), причину нужно искать в журнале systemd (journalctl) и в самом юните. Статус status=203/EXEC, 217/USER, 226/NAMESPACE, 1/FAILURE подсказывают класс проблемы.
Запомните последовательность: статус → журнал → юнит → запуск вручную.
Она подходит для любого сервиса.
Посмотрите статус systemctl status и журнал journalctl -xeu служба. Причины — ошибки конфига, порт, права.
#Причины и решения
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Ошибка конфигаФайл. | Failed. | Исправьте. |
| Порт занятКонфликт. | Failed. | Освободите. |
| ПраваФайлы. | Failed. | Исправьте. |
| Нет зависимостиПакет. | Failed. | Установите. |
#Пошаговое решение
- Выполните systemctl status -lВ терминале Debian сначала узнайте точное имя службы из сообщения об ошибке, например
ssh.serviceилиnginx.service. Запуститеsystemctl status ssh.service --full --no-pager, заменив пример на свою службу. Запишите значенияLoaded,Activeи первую причину сбоя;failedозначает, что служба не запустилась, а не то, что её надо немедленно переустановить. На удалённом сервере не перезапускайте SSH или сеть без запасного доступа. - Прочитайте journalctl -uПосле определения полного имени службы выполните
journalctl -u ssh.service -b --no-pager -n 80, заменивssh.serviceна реальное имя изsystemctl status. Смотрите записи непосредственно передFailedиexit-code, а не только последнюю строчку. Если журнал требует прав, добавьтеsudo. Сохраните текст ошибок и сначала исправьте указанную конфигурацию, занятый порт или отсутствующий файл; без диагностики не перезапускайте службу по кругу. - Проверьте юнит systemctl catВ терминале выполните
systemctl cat ssh.service, заменивssh.serviceна имя исследуемого юнита. ПосмотритеExecStart,User,EnvironmentFileи дополнительные файлы в*.d/. Проверьте существование указанных путей и права чтения, ничего не меняя. Если юнит редактировался вручную, сохраните копию перед исправлением; после изменения потребуетсяsudo systemctl daemon-reload, но только для администраторов, понимающих влияние на службу. - Запустите команду вручнуюВ выводе
systemctl cat ИМЯ.serviceнайдите строкуExecStart=и рабочий каталог/пользователя службы. Не копируйте эту строку в root-оболочку на боевом сервере вслепую: команда может запускаться от другого пользователя и менять данные. Для диагностики прежде проверьте путь к исполняемому файлу, настройкиUser=,WorkingDirectory=и файл конфигурации. При необходимости запускайте проверочную подкоманду или штатный--checkприложения с теми же правами и в тестовой среде; если есть ошибка, запишите её до изменения юнита. - Примените измененияПосле исправления файла пользовательского юнита systemd выполните
sudo systemctl daemon-reload, затемsudo systemctl restart ИМЯ.serviceтолько в согласованное окно обслуживания: перезапуск может прервать соединения. Если изменён только файл конфигурации приложения, необходимый способ перечитывания зависит от самой службы. Проверьтеsystemctl status ИМЯ.service --no-pagerиjournalctl -u ИМЯ.service -n 50 --no-pager. При сбое верните резервную копию конфигурации и повторите проверку.
#Статус и журнал
Выполните systemctl status имя.service -l --no-pager и journalctl -u имя.service -b -n 100 --no-pager. Для живого просмотра: journalctl -u имя.service -f. Коды: 203/EXEC — не найден или не исполняется бинарник (проверьте путь и chmod +x), 217/USER — пользователь не существует, 200/CHDIR — нет рабочей папки, 226/NAMESPACE — проблемы изоляции (ReadWritePaths), 1/FAILURE — приложение само вернуло ошибку.
#Юнит и конфигурация
Покажите итоговый юнит: systemctl cat имя.service. Проверьте ExecStart (абсолютный путь), User, WorkingDirectory, EnvironmentFile. После правки: sudo systemctl daemon-reload && sudo systemctl restart имя. Проверьте синтаксис: systemd-analyze verify /etc/systemd/system/имя.service. Зависимости и порядок: After=network-online.target, Wants=network-online.target.
#Ручной запуск и права
Запустите команду из ExecStart вручную от имени пользователя сервиса: sudo -u user /path/app --config /etc/app.conf — ошибка приложения станет видна сразу. Проверьте порт (ss -ltnp), права на файлы и каталоги, SELinux/AppArmor (journalctl | grep -i apparmor), место на диске (df -h). Сбросьте счётчик перезапусков: systemctl reset-failed имя. Лимиты ресурсов смотрите в systemctl show имя.
systemctl status имя.service -l --no-pagerjournalctl -u имя.service -b -n 100 --no-pagersystemctl cat имя.service