SystemdDoctor
служба не работает частое конфигурация синтаксис

Unit file is bad и ошибки разбора unit-файла

Состояние bad и сообщения вида «Unit myapp.service has a bad unit file setting» значат, что systemd прочитал файл, но не смог его принять. Обычно виновата одна строка: неверная секция, недопустимое значение или параметр не на своём месте.

Вероятные причины

По порядку: сверху то, что встречается чаще.

  1. Неверное имя или регистр секции

    Имена секций чувствительны к регистру: [service] вместо [Service] приводит к тому, что все параметры внутри игнорируются, и unit остаётся без исполняемой части.

  2. Недопустимое значение параметра

    Ошибки вида Restart=allways, Type=daemon, TimeoutStartSec=30 seconds делают unit непригодным. systemd сообщает о них при разборе, но сообщение легко пропустить в общем потоке.

  3. Параметр стоит не в своей секции

    Классика: WantedBy= в [Unit] вместо [Install], After= в [Service]. systemd считает такой параметр незнакомым и отбрасывает, а настройка молча не работает.

  4. Файл сохранён с меткой BOM или в неверной кодировке

    Метка порядка байтов перед первой секцией мешает её распознать. Редактор при этом показывает файл нормальным.

Диагностика

Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.

Главная команда: разбирает файл так же, как systemd, и печатает конкретные претензии.

systemd-analyze verify /etc/systemd/system/myapp.service

Строка Loaded покажет состояние bad вместо loaded.

systemctl status myapp.service --no-pager | head -6

Сообщения systemd о разборе файлов за текущую загрузку.

journalctl -b --no-pager | grep -iE "bad unit file|Unknown (key|section)" | head

Решение

Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.

1. Неверное имя или регистр секции
Почему происходит
Имена секций чувствительны к регистру: [service] вместо [Service] приводит к тому, что все параметры внутри игнорируются, и unit остаётся без исполняемой части.
Как проверить
Посмотрите файл и разбор.
systemctl cat myapp.service | grep -n "^\["
systemd-analyze verify /etc/systemd/system/myapp.service
Как исправить
Приведите имена секций к правильному виду: [Unit], [Service], [Install].
2. Недопустимое значение параметра
Почему происходит
Ошибки вида Restart=allways, Type=daemon, TimeoutStartSec=30 seconds делают unit непригодным. systemd сообщает о них при разборе, но сообщение легко пропустить в общем потоке.
Как проверить
Запустите проверку файла: она печатает строку и параметр.
systemd-analyze verify /etc/systemd/system/myapp.service
Как исправить
Исправьте значение по сообщению проверки. Допустимые варианты для каждого параметра есть в словаре этого сайта и в документации.
3. Параметр стоит не в своей секции
Почему происходит
Классика: WantedBy= в [Unit] вместо [Install], After= в [Service]. systemd считает такой параметр незнакомым и отбрасывает, а настройка молча не работает.
Как проверить
Проверьте файл статической проверкой.
systemd-analyze verify /etc/systemd/system/myapp.service 2>&1 | head -20
Как исправить
Перенесите параметр в нужную секцию. Проверка unit-файла на этом сайте отмечает такие случаи отдельно.
4. Файл сохранён с меткой BOM или в неверной кодировке
Почему происходит
Метка порядка байтов перед первой секцией мешает её распознать. Редактор при этом показывает файл нормальным.
Как проверить
Посмотрите тип файла и первые байты.
file /etc/systemd/system/myapp.service
head -c3 /etc/systemd/system/myapp.service | xxd | head -1
Как исправить
Сохраните файл в UTF-8 без метки BOM и с переносами строк Unix.

Пример вывода

Недопустимое значение Restart= делает unit непригодным. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.

$ systemctl status myapp.service
× myapp.service - My application
     Loaded: bad-setting (Reason: Unit myapp.service has a bad unit file setting.)
     Active: inactive (dead)

systemd[1]: /etc/systemd/system/myapp.service:8: Failed to parse service restart specifier, ignoring: allways
systemd[1]: myapp.service: Unit configuration has fatal error, unit will not be started.

Связанные ошибки

Источники

  • systemd.syntax(7)
    Синтаксис файлов конфигурации systemd: секции, ключи, комментарии, продолжение строк.
    официальная документация, systemd 255
    сверено 15 сентября 2026
  • systemd-analyze(1)
    Команда verify и что именно она проверяет.
    официальная документация, systemd 255
    сверено 15 сентября 2026
  • Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
    Воспроизведено на unit с Restart=allways и с секцией в нижнем регистре.
    собственная проверка, systemd 255
    сверено 15 сентября 2026