我正在为一些 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)的“命令行”部分指出