Я работаю над некоторыми файлами юнитов для некоторых служб 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)говорится, что
Обратите внимание, что первый аргумент (т. е. программа для выполнения) не может быть переменной.