You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu下脚本以服务运行时无法读取环境变量KEY的解决方法咨询

让systemd服务访问自定义环境变量的方法

问题原因

.bashrc是交互式Bash会话专属的配置文件,systemd启动服务时不会启动交互式Shell,因此无法读取其中定义的环境变量。

解决方案

1. 直接在systemd服务文件中定义环境变量

修改你的服务配置文件,在[Service]段添加Environment字段:

[Unit]
Description=Tool

[Service]
Restart=always
User=root
WorkingDirectory=/var/lib/tool
# 直接在这里定义环境变量
Environment="KEY=你的密钥内容"
ExecStart=/var/lib/tool/bin/python3 /var/lib/tool/main.py

[Install]
WantedBy=default.target

修改后执行以下命令使配置生效:

systemctl daemon-reload
systemctl restart tool.service

这是最直接可靠的方案,变量仅对该服务生效。

2. 写入systemd全局环境配置文件

如果需要多个服务共享该变量,可编辑/etc/environment文件:

echo "KEY=你的密钥内容" >> /etc/environment

然后重启systemd和目标服务:

systemctl daemon-reload
systemctl restart tool.service

该文件定义的变量会被所有systemd服务加载。

3. 强制服务加载.bashrc(不推荐)

通过Bash启动脚本并强制加载.bashrc,但.bashrc中可能包含仅适合交互式Shell的逻辑,可能导致服务启动异常:

[Service]
# 修改ExecStart为以下内容
ExecStart=/bin/bash -c 'source /root/.bashrc && /var/lib/tool/bin/python3 /var/lib/tool/main.py'

修改后同样需要执行systemctl daemon-reload和systemctl restart tool.service生效。

内容的提问来源于stack exchange,提问作者user3574603

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 02:04:58