systemd ExecStart、ExecStop 句の環境変数が期待どおりに動作しない

systemd ExecStart、ExecStop 句の環境変数が期待どおりに動作しない

私はいくつかの 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.サービス(5)と述べています

最初の引数 (つまり、実行するプログラム) は変数ではない可能性があることに注意してください。

関連情報