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.