Failed to start … — что делать с общим сообщением
Строка Failed to start ИМЯ — это итог, который systemd печатает после неудачи. Причина всегда выше: код выхода, сигнал, таймаут или неудача зависимости. Разбор начинается с поиска этих строк, а не с самой этой.
Что это значит
Порядок простой. Сначала systemctl status — он даёт состояние результата и код. Затем journalctl -xeu — там сообщения самой службы. И только потом, если ничего не нашлось, общий порядок действий: проверка unit-файла, прав, путей.
Вероятные причины
По порядку: сверху то, что встречается чаще.
-
Выше в журнале есть код выхода или сигнал
Это и есть причина. Число до 200 назначила программа, 200 и выше — systemd, не сумев подготовить запуск.
-
Неудача зависимости
Если рядом есть строка «Dependency failed for», ваша служба не запускалась вовсе. Разбирать надо зависимость.
-
Ничего больше в журнале нет
Служба может писать в собственный файл или подавлять вывод. Тогда в журнале только строки systemd.
Диагностика
Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.
Состояние результата, код и последние строки — основа разбора.
systemctl status myapp.service -l --no-pagerСообщения службы с пояснениями systemd.
journalctl -xeu myapp.service --no-pager -n 60Не упала ли зависимость: тогда причина в другом unit.
systemctl --failed --no-pagerРешение
Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.
- Почему происходит
- Это и есть причина. Число до 200 назначила программа, 200 и выше — systemd, не сумев подготовить запуск.
- Как проверить
-
Найдите строку с кодом.
systemctl status myapp.service -l --no-pager | grep -E "status=|signal=|Result:"
- Как исправить
- Разбирайте найденный код: на этом сайте для каждого есть отдельная запись с причинами и решением.
- Почему происходит
- Если рядом есть строка «Dependency failed for», ваша служба не запускалась вовсе. Разбирать надо зависимость.
- Как проверить
-
Посмотрите упавшие unit.
systemctl --failed --no-pager systemctl list-dependencies myapp.service --no-pager | head -20
- Как исправить
- Найдите первую упавшую зависимость в цепочке и разбирайтесь с ней.
- Почему происходит
- Служба может писать в собственный файл или подавлять вывод. Тогда в журнале только строки systemd.
- Как проверить
-
Посмотрите настройки вывода и собственные журналы программы.
systemctl show myapp.service -p StandardOutput -p StandardError sudo ls -l /var/log/myapp/ 2>/dev/null
- Как исправить
-
Верните вывод в журнал (
StandardOutput=journal) или прочитайте собственный файл программы. Для разбора можно запустить программу вручную от пользователя службы.
Пример вывода
Итоговая строка и настоящая причина выше. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.
myapp[4500]: fatal: cannot open /etc/myapp/config.yml: permission denied
systemd[1]: myapp.service: Main process exited, code=exited, status=1/FAILURE
systemd[1]: myapp.service: Failed with result 'exit-code'.
systemd[1]: Failed to start myapp.service - My application.
Полезная строка здесь первая, а не последняя. Именно поэтому журнал читают снизу вверх, начиная с итога и поднимаясь к причине.
Связанные ошибки
- Failed with result 'exit-code' Состояние exit-code: служба завершилась с ненулевым кодом. Что это сообщение значит и где искать настоящую причину.
- Dependency failed for … и результат 'dependency' Сообщение Dependency failed for: служба не запускалась, потому что упала её зависимость. Как найти настоящего виновника.
- status=1/FAILURE в systemd Код 1/FAILURE означает, что программа запустилась и сама завершилась с ошибкой. Как найти настоящую причину в журнале службы.
- Failed with result 'timeout' Состояние timeout: служба не уложилась в отведённое время при запуске, остановке или перезагрузке настроек.
- Job for myapp.service failed: с чего начинать разбор Сообщение systemctl при неудачном запуске: что в нём есть, чего в нём нет и какие три команды дают ответ.
- В терминале работает, а под systemd нет Самая частая жалоба: программа запускается руками, но не как служба. Полный разбор отличий окружения.
- A start job is running: загрузка висит на одной службе Загрузка останавливается с обратным отсчётом: служба не укладывается в таймаут. Как найти виновника и не ждать.
- Address already in use при запуске службы Порт или адрес уже занят: bind() failed (98: Address already in use). Как найти владельца порта и что делать с остатками прежнего процесса.
Источники
-
systemctl(1)
Вывод состояния и его строки. -
Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
Проверено на нескольких видах отказов: итоговая строка одинакова, причина всегда выше.