SystemdDoctor
DefaultInstance= [Install]

DefaultInstance= и шаблонные unit systemd

Задаёт экземпляр по умолчанию для шаблонного unit — файла с символом @ в имени. Позволяет включить шаблон без явного указания экземпляра.

Что делает

Шаблонный unit — это один файл для многих однотипных служб. Часть имени после @ становится значением подстановки %i, и его используют как параметр: номер порта, имя сайта, версия кластера. Так работают postgresql@16-main.service и getty@tty1.service.

Экземпляр указывается при запуске и включении: systemctl enable myapp@prod.service. Без него включить шаблон нельзя — если только не задан экземпляр по умолчанию.

Где ставится. В секции [Install] шаблонного unit. Подстановки %i и %I используются в остальных секциях.

Значения

ЗначениеЧто происходит
%iчасть имени после @ в исходном виде.
%Iто же, но с раскодированными служебными последовательностями.
DefaultInstance=prodэкземпляр по умолчанию для включения без явного имени.

Пример

Один файл для нескольких окружений.

# /etc/systemd/system/myapp@.service
[Unit]
Description=Приложение myapp (%i)

[Service]
EnvironmentFile=/etc/myapp/%i.env
ExecStart=/usr/local/bin/myapp --env %i

[Install]
WantedBy=multi-user.target
DefaultInstance=prod

# запуск: systemctl enable --now myapp@prod.service

Типичные ошибки

Подстановка %i в обычном (нешаблонном) unit пуста — параметры окажутся неполными.

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

Если в экземпляре есть косая черта или пробел, нужна подстановка %I и экранирование через systemd-escape.

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

Рядом стоящие параметры

Где важен на практике

Источники

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