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

Service has more than one ExecStart= setting

Для всех типов кроме oneshot команда запуска должна быть одна. Чаще всего эта ошибка появляется не из-за двух строк в файле, а из-за переопределения: drop-in добавляет команду к существующей, а не заменяет её.

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

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

  1. В переопределении не сброшено прежнее значение

    Списочные параметры в drop-in дополняются. Без пустого присваивания получается две команды.

  2. Две команды в одном файле при неподходящем типе

    Автор рассчитывал, что команды выполнятся по порядку. Для этого есть ExecStartPre=, а не вторая строка запуска.

  3. Тип сменили с oneshot на другой, а команды остались

    Файл с несколькими командами работал как oneshot. После смены типа на simple или notify те же строки стали недопустимы, и служба перестала запускаться совсем.

Диагностика

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

Все объявления команды с номерами строк и файлами.

systemctl cat myapp.service | grep -n ExecStart

Тип службы: от него зависит, допустимы ли несколько команд.

systemctl show myapp.service -p Type

Все переопределения в системе.

sudo systemd-delta --type=extended | head -20

Решение

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

1. В переопределении не сброшено прежнее значение
Почему происходит
Списочные параметры в drop-in дополняются. Без пустого присваивания получается две команды.
Как проверить
Посмотрите все источники и итоговое значение.
systemctl cat myapp.service | grep -n ExecStart
systemctl show myapp.service -p ExecStart
Как исправить
Сбросьте значение пустой строкой, затем задайте новое.
[Service]
ExecStart=
ExecStart=/usr/local/bin/myapp --new
2. Две команды в одном файле при неподходящем типе
Почему происходит
Автор рассчитывал, что команды выполнятся по порядку. Для этого есть ExecStartPre=, а не вторая строка запуска.
Как проверить
Посмотрите тип и число команд.
systemctl show myapp.service -p Type
systemctl cat myapp.service | grep -c "^ExecStart="
Как исправить
Перенесите подготовительные шаги в ExecStartPre= или поставьте Type=oneshot, если это последовательность задач без постоянного процесса.
3. Тип сменили с oneshot на другой, а команды остались
Почему происходит
Файл с несколькими командами работал как oneshot. После смены типа на simple или notify те же строки стали недопустимы, и служба перестала запускаться совсем.
Как проверить
Посмотрите историю правок файла и итоговый тип.
systemctl cat myapp.service | grep -nE "^(Type|ExecStart)="
Как исправить
Оставьте одну команду запуска, а остальные разнесите по ExecStartPre=. Если задача действительно состоит из нескольких шагов без долгоживущего процесса, верните Type=oneshot.

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

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

systemd[1]: /etc/systemd/system/myapp.service.d/override.conf:2: Service has more than one ExecStart= setting, which is only allowed for Type=oneshot services. Refusing.
systemd[1]: myapp.service: Unit configuration has fatal error, unit will not be started.

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

Источники

  • systemd.service(5)
    Ограничение на число команд запуска по типам.
    официальная документация, systemd 255
    сверено 15 сентября 2026
  • systemd.unit(5)
    Сброс списочных параметров в drop-in.
    официальная документация, systemd 255
    сверено 15 сентября 2026
  • Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
    Воспроизведено переопределением без сброса ExecStart.
    собственная проверка, systemd 255
    сверено 15 сентября 2026