我是新来的。我有一项服务,可以很好地使用硬编码的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
的值。
我做错了什么?
发布于 2023-03-30 18:16:41
$
前缀在ExecStart
中的扩展有规则等。$var
和${var}
是有区别的。前者只有在其本身作为一个单词出现时才会被内插(由空格包围)。后者没有这一限制。所以使用,例如,
-port=${PORT}
这方面的引用在man systemd.service中的标题命令行下。
发布于 2023-03-30 17:44:51
它可能与文件权限有关。看看这是否解决了这个问题:
chown root:root /etc/my-service/my-service-systemd.cfg
chmod 0640 /etc/my-service/my-service-systemd.cfg
https://serverfault.com/questions/1127530
复制相似问题