Las variables de entorno en systemd ExecStart, las cláusulas ExecStop no funcionan como se esperaba

Las variables de entorno en systemd ExecStart, las cláusulas ExecStop no funcionan como se esperaba

Estoy trabajando en algunos archivos unitarios para algunos servicios systemd. El prefijo de ruta a algunos de mis archivos binarios es bastante largo y se usan varias veces en las cláusulas ExecStart=, ExecStartPost= y ExecStop=.

Tengo algunas variables de entorno definidas (que también deben pasarse al servicio), por ejemplo:

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

Creo, desde la sección "Líneas de comando" en systemd.service(5), que debería poder usar la expansión variable en las cláusulas Exec*=, por ejemplo:

ExecStart=${ORACLE_HOME}/bin/dbstart

Cuando intento eso y hago una recarga del demonio systemctl, aparece el siguiente error en el diario:

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

Los documentos de systemd son bastante claros en cuanto a que la ruta al archivo a ejecutar debe comenzar (excepto los prefijos permitidos) con / pero ¿hay algún matiz de la sintaxis que me falta y que me permitiría hacer lo que quiero?

Con el tiempo, me gustaría tener archivos que contengan las variables de entorno que se utilizan para que puedan usarse en los archivos de la unidad systemd y también para configurar perfiles, etc.

Estoy usando RHEL7 y RHEL8.

Respuesta1

Puede utilizar variables de entorno, pero no como nombre de comando. La sección "Líneas de comando" deservicio.systemd(5)Establece que

Tenga en cuenta que el primer argumento (es decir, el programa a ejecutar) puede no ser una variable.

información relacionada