如果你在用户级别设置的环境变量在 Systemd 服务中无法加载,可能是由于 Systemd 服务运行时的环境与用户登录会话的环境不同。Systemd 服务通常不继承用户的环境变量,特别是当服务以 systemd 启动时。

以下是几种方法来确保你的环境变量在 Systemd 服务中可用:

1. 在服务文件中直接设置环境变量

可以在你的 Systemd 服务文件中直接设置所需的环境变量。编辑你的服务文件(通常在 /etc/systemd/system/ 或者 ~/.config/systemd/user/ 下),添加 Environment 字段:

[Service]
Environment="VAR_NAME=value"

2. 使用 EnvironmentFile 指定环境变量文件

你也可以将环境变量存储在一个文件中,然后在服务文件中引用此文件。例如,你可以创建一个名为 /etc/default/your-service 的文件,并在其中写入你的环境变量:

# /etc/default/your-service
VAR_NAME=value
ANOTHER_VAR=another_value

然后在你的服务文件中添加以下行:

[Service]
EnvironmentFile=/etc/default/your-service

3. 使用 ~/.pam_environment 文件

如果你的服务是用户级的(即在用户空间中运行),则可以尝试在 ~/.pam_environment 中设置环境变量。格式如下:

# ~/.pam_environment
VAR_NAME=value
ANOTHER_VAR=another_value

4. 重载 Systemd 守护进程

不论你使用哪种方法,记得在每次修改服务文件后,执行以下命令来重载 Systemd 配置:

sudo systemctl daemon-reload

5. 确认服务的用户上下文

确认你的服务是以哪个用户执行的。在服务文件中,UserGroup 字段用于指定服务应该以哪个用户和组身份运行:

[Service]
User=your_username
Group=your_group

6. 调试问题

如果仍然无法加载环境变量,可以检查服务的状态和日志,以便排查问题:

sudo systemctl status your-service
sudo journalctl -u your-service

查看输出中是否有与环境变量相关的错误信息,以便进行进一步的调查和调试。

通过以上步骤,你应该能够确保在 Systemd 服务中使用所需的环境变量。选择合适的方法来设置环境变量,根据你的特定需求进行调整即可。