Variáveis ​​de ambiente no systemd ExecStart, cláusulas ExecStop não funcionam conforme o esperado

Variáveis ​​de ambiente no systemd ExecStart, cláusulas ExecStop não funcionam conforme o esperado

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.

informação relacionada