systemd服务配置环境变量需使用Environment和EnvironmentFile指令:前者适合少量固定变量,后者适合多变量集中管理;修改后须daemon-reload并restart服务,通过show或status验证。

在 Linux 运维中,为 systemd 服务配置环境变量,核心是用好 Environment 和 EnvironmentFile 两个指令,它们都写在 [Service] 区块里。直接改用户 shell 的 .bashrc 或系统 /etc/environment 对 systemd 服务无效,因为 systemd 不读这些文件。
Environment=KEY=VALUE 方式(适合少量、固定变量)
适用于变量不多、值明确、不常变动的场景,比如指定端口、日志级别或简单路径。
- 语法是每行一个
Environment=KEY=VALUE,支持多次出现,后定义的会覆盖前一个同名变量 - 变量值中若含空格或特殊字符,需用双引号包裹,例如
Environment="JAVA_HOME=/usr/lib/jvm/java-17-openjdk" - 不能引用其他变量(如
$HOME),systemd 不做 shell 展开;但可用%i、%n等单元说明符(需确认服务类型支持) - 示例:
[Service]<br> Environment=NODE_ENV=production<br> Environment=PORT=3001<br> Environment="LOG_DIR=/var/log/myapp"
EnvironmentFile=/path/to/file 方式(适合多变量、集中管理)
当环境变量较多、需要分环境维护(如 dev/staging/prod)、或由部署工具生成时,推荐用这个方式。
- 文件路径必须是绝对路径;systemd 会按顺序读取并加载其中所有
KEY=VALUE行 - 支持以
#开头的注释行和空行,忽略不处理 - 文件权限建议设为
600(仅属主可读写),避免敏感信息泄露;属主应与User=指定的运行用户一致 - 如果文件不存在,默认报错失败;加短横线可忽略缺失,写成
EnvironmentFile=-/etc/myapp/env.conf - 示例文件
/etc/myapp/env.conf内容:
DB_HOST=localhost<br> DB_PORT=5432<br> API_TIMEOUT=30s
注意事项与常见问题
环境变量配置不是“写完就生效”,必须配合完整流程才能起作用:
- 修改后务必执行
systemctl daemon-reload,让 systemd 重新读取配置 - 重启服务而非 reload:用
systemctl restart your-service.service,因为环境变量只在进程启动时注入 - 验证是否生效:运行
systemctl show --property=Environment your-service.service查看已加载的变量;或用systemctl status your-service.service看启动日志里是否有报错(如找不到 env 文件) - 不要混用:避免既用
Environment=又用EnvironmentFile=定义同一个变量,容易造成覆盖混乱 - 安全提示:含密码、密钥等敏感信息的变量,优先通过
EnvironmentFile管理,并严格控制文件权限和访问范围


















