EnvironmentFile= в systemd: переменные из файла
Подключает файл, из которого systemd читает переменные окружения. Формат простой: строки вида «ИМЯ=значение», комментарии с решётки.
Что делает
Удобство в том, что файл можно закрыть правами и не хранить значения в unit-файле. Так дистрибутивы вынесли настройки в /etc/default: путь к файлу указывают в unit, а правит его администратор.
Файл читает systemd, а не оболочка. Поэтому конструкции вида export VAR=1, подстановки и условия там не работают: строка либо имеет вид «ИМЯ=значение», либо игнорируется.
Где ставится. В секции [Service]. Путь абсолютный. Дефис перед путём делает файл необязательным.
Значения
| Значение | Что происходит |
|---|---|
/etc/myapp/env | обязательный файл: без него служба не запустится. |
-/etc/default/myapp | необязательный: отсутствие не ошибка. |
Пример
Настройки в отдельном файле с закрытыми правами.
[Service]
EnvironmentFile=-/etc/default/myapp
EnvironmentFile=/etc/myapp/secrets.env
ExecStart=/usr/local/bin/myapp
# /etc/myapp/secrets.env, права 0600
DB_PASSWORD=...
API_TOKEN=...
Порядок важен: если переменная встречается в двух файлах, победит значение из того, что подключён позже.
Типичные ошибки
Отсутствие файла без дефиса перед путём останавливает запуск.
export и подстановки в файле не работают: это не скрипт оболочки.
Кавычки вокруг значения снимаются: VAR="a b" даст a b, а не "a b".
Изменение файла требует перезапуска службы: окружение читается при старте.
Связанные ошибки
- status=1/FAILURE в systemdКод 1/FAILURE означает, что программа запустилась и сама завершилась с ошибкой. Как найти настоящую причину в журнале службы.
- No such file or directory в журнале службыСлужба не находит файл или каталог. Разбор: путь, момент запуска, изоляция unit-файла, символические ссылки, приватный /tmp.
- status=5/NOTINSTALLED и status=6/NOTCONFIGURED в systemdКоды 5 и 6 по соглашению LSB: программа не установлена или не настроена. Что это значит на практике и как проверить.
Рядом стоящие параметры
Где важен на практике
Источники
- systemd.exec(5)
- Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)