我正在为一些 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)指出
请注意,第一个参数(即要执行的程序)可能不是变量。