SystemdDoctor
Environment= [Service]

Environment= в systemd: переменные окружения службы

Задаёт переменные окружения для процессов службы в виде «ИМЯ=значение». Окружение службы не связано с вашим профилем оболочки: ни .bashrc, ни .profile она не читает.

Что делает

Это источник классической путаницы «в терминале работает, в службе нет». У службы короткий PATH и никаких переменных, которые вы привыкли видеть. Всё, что программе нужно, задаётся здесь или в файле окружения.

systemd не разворачивает переменные внутри значений: запись Environment=PATH=$PATH:/opt/bin попадёт в окружение буквально, вместе со знаком доллара. Собирать значения из других переменных нужно заранее или в скрипте-обёртке.

Где ставится. В секции [Service]. Допустимо несколько строк, каждая с одной или несколькими парами.

Значения

ЗначениеЧто происходит
Environment=LANG=ru_RU.UTF-8одна переменная.
Environment="ARGS=--flag value" PORT=8080значение с пробелом берётся в кавычки.
Environment=PATH=/usr/local/bin:/usr/bin:/binполная замена PATH — без подстановки прежнего.

Пример

Переменные для приложения и явный PATH.

[Service]
Environment=NODE_ENV=production
Environment=PORT=8080
Environment=PATH=/usr/local/bin:/usr/bin:/bin
ExecStart=/usr/local/bin/node /opt/app/server.js

Секреты так передавать не стоит: значения видны в systemctl show и в /proc. Для них есть LoadCredential=.

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

Подстановки вида $PATH внутри значения не разворачиваются: строка попадёт в окружение как есть.

Секреты в переменных видны любому, кто может выполнить systemctl show: используйте учётные данные.

Переменные из профиля пользователя службе недоступны — их нужно задавать явно.

Значение с пробелами без кавычек будет разобрано как несколько переменных.

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

  • status=127 в systemd: команда не найденаКод 127 без имени: оболочка не нашла команду. Появляется, когда ExecStart запускает скрипт или sh -c, а внутри команды нет.
  • status=203/EXEC в systemdКод 203/EXEC означает, что systemd не смог выполнить программу из ExecStart=. Разбор причин: путь, права, интерпретатор, синтаксис оболочки.
  • status=2/INVALIDARGUMENT в systemdКод 2/INVALIDARGUMENT: программа сочла аргументы или настройки недопустимыми. Частая причина — лишние кавычки в ExecStart=.

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

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

Источники

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