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

Шаблонный unit: экземпляр не запускается

Шаблонные unit удобны, но добавляют один слой ошибок: подстановка имени экземпляра. Если файл настроек для экземпляра не создан или имя содержит символы, требующие экранирования, запуск не проходит.

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

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

  1. Нет файла настроек для этого экземпляра

    Шаблон обычно подключает файл по имени экземпляра. Для нового экземпляра его надо создать.

  2. Имя экземпляра требует экранирования

    Косая черта, пробел и дефис в имени экземпляра должны быть преобразованы. Вручную это делают неверно.

  3. Запускается шаблон без экземпляра

    Файл myapp@.service сам по себе не служба: у него нет значения подстановки. Запуск без части после @ не проходит.

Диагностика

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

Содержимое шаблона с подставленным экземпляром.

systemctl cat myapp@prod.service

Правильное имя экземпляра для произвольного значения.

systemd-escape --template=myapp@.service "значение"

Все экземпляры и их состояния.

systemctl list-units "myapp@*" --all --no-pager

Решение

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

1. Нет файла настроек для этого экземпляра
Почему происходит
Шаблон обычно подключает файл по имени экземпляра. Для нового экземпляра его надо создать.
Как проверить
Посмотрите, что подключает шаблон, и есть ли файл.
systemctl cat myapp@prod.service | grep -iE "EnvironmentFile|ExecStart"
ls -l /etc/myapp/prod.env 2>/dev/null
Как исправить
Создайте файл настроек для экземпляра. Если он необязателен, поставьте дефис перед путём в шаблоне.
2. Имя экземпляра требует экранирования
Почему происходит
Косая черта, пробел и дефис в имени экземпляра должны быть преобразованы. Вручную это делают неверно.
Как проверить
Получите правильное имя.
systemd-escape --template=myapp@.service "/srv/sites/example.org"
Как исправить
Используйте имя из вывода команды преобразования и подстановку %I в шаблоне, если внутри нужен исходный путь.
3. Запускается шаблон без экземпляра
Почему происходит
Файл myapp@.service сам по себе не служба: у него нет значения подстановки. Запуск без части после @ не проходит.
Как проверить
Посмотрите имя, которое вы запускаете.
systemctl list-units "myapp@*" --all --no-pager
Как исправить
Указывайте экземпляр: systemctl start myapp@prod.service. Для автозапуска включайте конкретные экземпляры.

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

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

× myapp@stage.service - Приложение myapp (stage)
     Active: failed (Result: exit-code) since Mon 2026-09-15 21:02:41 MSK; 1s ago

systemd[4700]: myapp@stage.service: Failed to load environment files: No such file or directory
systemd[4700]: myapp@stage.service: Failed at step ENV_FILES spawning /usr/local/bin/myapp: No such file or directory

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

Где встречается чаще всего

Источники

  • systemd.unit(5)
    Шаблонные unit, подстановки и экранирование имён.
    официальная документация, systemd 255
    сверено 15 сентября 2026
  • Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
    Воспроизведено запуском экземпляра без файла настроек.
    собственная проверка, systemd 255
    сверено 15 сентября 2026