首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么我的Systemd服务不从我的EnvironmentFile传递参数?

为什么我的Systemd服务不从我的EnvironmentFile传递参数?
EN

Server Fault用户
提问于 2023-03-30 13:18:36
回答 2查看 566关注 0票数 5

我是新来的。我有一项服务,可以很好地使用硬编码的ExecStart命令行。现在我正在尝试参数化它,我发现EnvironmentFile在网上写好了。因此,我对服务文件进行了如下修改(为了隐私起见,有些东西被混淆了):

代码语言:javascript
运行
复制
[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肯定在那里:

代码语言:javascript
运行
复制
CREDENTIALS_FILE=/etc/my-service/my-service.pwd
LOG_LEVEL=2
PORT=443

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

我做错了什么?

EN

回答 2

Server Fault用户

回答已采纳

发布于 2023-03-30 18:16:41

$前缀在ExecStart中的扩展有规则等。$var${var}是有区别的。前者只有在其本身作为一个单词出现时才会被内插(由空格包围)。后者没有这一限制。所以使用,例如,

代码语言:javascript
运行
复制
-port=${PORT}

这方面的引用在man systemd.service中的标题命令行下。

票数 6
EN

Server Fault用户

发布于 2023-03-30 17:44:51

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

代码语言:javascript
运行
复制
chown root:root /etc/my-service/my-service-systemd.cfg 
chmod 0640 /etc/my-service/my-service-systemd.cfg
票数 1
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/1127530

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档