为什么我的 Systemd 服务没有从我的 EnvironmentFile 传递参数?

为什么我的 Systemd 服务没有从我的 EnvironmentFile 传递参数?

我对 systemd 还不熟悉。我有一个服务,它使用ExecStart硬编码的命令行运行良好。现在我试图对其进行参数化,我EnvironmentFile在网上找到了相关说明。因此,我按如下方式修改了我的服务文件(出于隐私考虑,有些内容进行了模糊处理):

[Service]
Type=simple
EnvironmentFile=/etc/my-service/my-service-systemd.cfg
ExecStart=/usr/local/bin/my-service -port=$PORT -log-level=$LOG_LEVEL -creds=$CREDENTIALS_FILE
ExecStop=/bin/kill -15 $MAINPID

我检查了一下,环境文件/etc/my-service/my-service-systemd.cfg确实在那里:

CREDENTIALS_FILE=/etc/my-service/my-service.pwd
LOG_LEVEL=2
PORT=443

但是当我运行该服务时,它会失败,并且日志表明所有参数都是空的,即服务文件没有从中传递值EnvironmentFile

我究竟做错了什么?

答案1

等中$的前缀扩展有规则。和之间有区别。 前者只有单独出现(被空格包围)时才会插入。 后者没有此限制。 因此,例如使用ExecStart$var${var}

-port=${PORT}

参考资料位于标题下命令行系统服务

答案2

这可能与文件权限有关。看看这是否能解决问题:

chown root:root /etc/my-service/my-service-systemd.cfg 
chmod 0640 /etc/my-service/my-service-systemd.cfg

相关内容