为 systemd 服务配置环境变量需显式声明:1. 在 .service 文件的 [Service] 段用 Environment 或 EnvironmentFile;2. 全局设置修改 /etc/systemd/system.conf 中 DefaultEnvironment;3. 用户级服务配置 ~/.config/systemd/user.conf 或 environment.d/;4. 可用包装脚本间接加载。

为 systemd 服务配置环境变量,核心是让服务进程启动时能正确读取所需变量(如 PATH、LD_LIBRARY_PATH、自定义配置项等)。systemd 不继承 shell 的环境,所以不能靠 ~/.bashrc 或 /etc/profile 自动生效。必须显式声明或加载。
在服务单元文件中直接设置
最常用、最推荐的方式是在 .service 文件的 [Service] 段使用 Environment 或 EnvironmentFile。
-
单个或多个变量直写:适合少量、固定值
Environment="PATH=/usr/local/bin:/usr/bin:/bin" "NODE_ENV=production" -
从外部文件加载:适合变量多、需复用或由部署流程生成
EnvironmentFile=/etc/default/myapp(文件内容格式为KEY=VALUE,每行一个,支持#注释) - 注意:
EnvironmentFile路径必须绝对,且文件需有读权限;若文件不存在,systemd 默认报错失败(可加-前缀忽略,如EnvironmentFile=-/etc/default/myapp)
为所有系统服务统一设置默认变量
适用于全局通用变量(如统一 PATH 或调试开关),修改 /etc/systemd/system.conf:
yuanfang-skills 的共享设计系统,提供 token CSS 变量、12+ 主题以及可复用的布局类型 HTML 块,供 yuanfang-html-image(以及 fu...)使用。
- 编辑该文件,取消注释并修改
DefaultEnvironment=行
例如:DefaultEnvironment="PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" - 修改后必须执行
sudo systemctl daemon-reload才生效 - 此设置影响所有
systemscope 的服务(即非用户级),但不覆盖服务文件中已明确写的Environment
为用户级服务(systemctl --user)设环境变量
适用于普通用户运行的服务(如桌面应用后台进程):
- 编辑
~/.config/systemd/user.conf或/etc/systemd/user.conf,添加DefaultEnvironment=... - 或用命令动态设置(仅对后续启动的服务生效):
systemctl --user set-environment JAVA_HOME=/usr/lib/jvm/java-17-openjdk - 也可创建
~/.config/systemd/user/environment.d/*.conf目录下的配置文件,每行KEY=VALUE
用包装脚本间接加载
当需要执行 shell 初始化逻辑(比如 source /etc/profile 或运行环境检测脚本)时可用:
- 写一个启动脚本(如
/opt/myapp/start.sh),开头source /etc/profile或export变量,再exec /path/to/real/binary - 在 service 文件中写
ExecStart=/opt/myapp/start.sh - 注意:脚本需有执行权限;
exec是关键,避免多一层 shell 进程;这种方式灵活但增加维护点

















