我对 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