Переменные среды в предложениях systemd ExecStart, ExecStop не работают должным образом

Переменные среды в предложениях systemd ExecStart, ExecStop не работают должным образом

Я работаю над некоторыми файлами юнитов для некоторых служб systemd. Префикс пути к некоторым моим бинарникам довольно длинный, и они используются несколько раз в предложениях ExecStart=, ExecStartPost= и ExecStop=.

У меня определены некоторые переменные среды (которые также необходимо передать службе), например:

Environment=ORACLE_HOME=/u01/app/oracle/product/19/db_1

Из раздела «Командные строки» в systemd.service(5) я полагаю, что я должен иметь возможность использовать расширение переменных в предложениях Exec*=, например:

ExecStart=${ORACLE_HOME}/bin/dbstart

Когда я пробую это сделать и выполняю systemctl daemon-reload, в журнале появляется следующая ошибка:

systemd[1]: [/usr/lib/systemd/system/oracle.service:37] Executable path is not absolute, ignoring: ${ORACLE_HOME}/bin/dbstart /u01/app/oracle/product/19/db_1

В документации systemd довольно ясно указано, что путь к файлу для запуска должен начинаться (за исключением разрешенных префиксов) с /, но есть ли какие-то нюансы синтаксиса, которые я упускаю, и которые позволили бы мне сделать то, что я хочу?

В конечном итоге мне хотелось бы иметь файлы, содержащие переменные среды, которые используются, чтобы их можно было использовать в файлах модулей systemd, а также для настройки профилей и т. д.

Я использую RHEL7 и RHEL8.

решение1

Вы можете использовать переменные окружения, но не как имя команды. Раздел «Командные строки»systemd.service(5)говорится, что

Обратите внимание, что первый аргумент (т. е. программа для выполнения) не может быть переменной.

Связанный контент