Systemd服务中加载环境变量文件需使用EnvironmentFile=指令,指定纯文本键值对文件路径,支持注释与空行但不支持shell语法,须配合WorkingDirectory和PATH设置,并执行daemon-reload与restart生效。

在 Systemd 服务中加载环境变量文件,核心是使用 EnvironmentFile= 指令,它让服务启动时自动读取外部纯文本配置文件中的 KEY=value 行。这种方式适合变量较多、需与部署流程配合或避免硬编码的场景。
准备环境变量文件
新建一个普通文本文件(如 /etc/myapp/env.conf),内容为标准键值对格式:
- 每行一个变量,形如
DB_HOST=localhost - 支持
#开头的注释和空行 - 不支持 shell 语法(不能写
PATH="/opt/bin:$PATH"或$(pwd)) - 确保文件权限合理,例如
644,且运行服务的用户(默认root或指定User=)有读取权限
在服务单元中引用该文件
编辑服务文件(如 /etc/systemd/system/myapp.service),在 [Service] 段添加:
-
EnvironmentFile=/etc/myapp/env.conf—— 加载指定路径文件 -
EnvironmentFile=-/etc/myapp/env.optional—— 前缀短横表示“文件不存在也不报错”,适合可选配置
注意:多个 EnvironmentFile= 按顺序加载,后出现的同名变量会覆盖前面的。
师生共创生态系统对接指南。当用户需要对接大学政策、平台资源、投资机构、产业伙伴等外部资源支持时使用。触发词:师生共创生态、大学支持、平台赋能、投资对接、产业合作、政策支持、清华x-lab、孵化器、创业资源
配合关键设置提升可靠性
仅加 EnvironmentFile 不够,还需同步处理两个常被忽略但直接影响运行的项:
-
WorkingDirectory:设为应用根目录(如
WorkingDirectory=/opt/myapp),否则相对路径配置(如./config.yaml)会失败 -
PATH:即使变量文件里写了
PATH=...,也建议显式声明,防止命令找不到(如Environment="PATH=/usr/local/bin:/usr/bin:/bin")
生效与验证步骤
配置完成后必须执行以下操作才能真正生效:
- 运行
sudo systemctl daemon-reload重新加载所有 unit 文件 - 重启服务:
sudo systemctl restart myapp.service - 检查是否加载成功:
sudo systemctl show -p Environment myapp.service - 确认进程实际环境:
cat /proc/$(pidof myapp)/environ | tr '\0' '\n' | grep -E '^(DB_|PATH)='
常见失效原因包括:没执行 reload、文件路径写错、权限不足、变量名大小写不一致、或误把 /etc/environment 当作 systemd 可读文件(它不被 systemd 直接加载)。

















