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

您可以使用環境變量,但不能作為命令名稱。的“命令列”部分系統服務(5)指出

請注意,第一個參數(即要執行的程序)可能不是變數。

相關內容