Linux
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。
您可以使用環境變數,但不能作為命令名稱。systemd.service(5)的“命令行”部分指出
請注意,第一個參數(即要執行的程序)可能不是變數。