Estou trabalhando em alguns arquivos de unidade para alguns serviços do systemd. O prefixo do caminho para alguns dos meus binários é bastante longo e eles são usados várias vezes nas cláusulas ExecStart=, ExecStartPost= e ExecStop=.
Tenho algumas variáveis de ambiente definidas (que também precisam ser passadas para o serviço), por exemplo:
Environment=ORACLE_HOME=/u01/app/oracle/product/19/db_1
Acredito, na seção "Linhas de comando" em systemd.service(5) que devo ser capaz de usar expansão de variável nas cláusulas Exec*= - por exemplo:
ExecStart=${ORACLE_HOME}/bin/dbstart
Quando tento fazer isso e faço um systemctl daemon-reload, recebo o seguinte erro no diário:
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
Os documentos do systemd são bastante claros de que o caminho para o arquivo a ser executado deve começar (exceto para os prefixos permitidos) com / mas há alguma nuance na sintaxe que estou faltando que me permitiria fazer o que quero?
Eventualmente, gostaria de ter arquivos contendo as variáveis de ambiente usadas para que possam ser usadas nos arquivos da unidade do systemd e também para configurar perfis, etc.
Estou usando RHEL7 e RHEL8.
Responder1
Você pode usar variáveis de ambiente, mas não como nome do comando. A seção "Linhas de comando" dosystemd.serviço(5)afirma que
Observe que o primeiro argumento (ou seja, o programa a ser executado) não pode ser uma variável.