Linux 下 Hermes Agent 代理配置不生效问题的解决
- [Linux 下 Hermes Agent 代理配置不生效问题的解决](#Linux 下 Hermes Agent 代理配置不生效问题的解决)
Linux 下 Hermes Agent 代理配置不生效问题的解决
在使用 Hermes Agent(或类似 Gateway 服务)时,即使已在 Linux 环境变量中配置了 ALL_PROXY,并且 curl 测试正常,服务本身仍然可能无法通过代理访问网络,导致 Telegram 连接超时、OpenRouter 报错等问题。
问题现象
查看错误日志,执行命令cat ~/.hermes/logs/errors.log:
log
WARNING gateway.platforms.telegram_network: [Telegram] Primary api.telegram.org connection failed
WARNING agent.auxiliary_client: marking openrouter unhealthy (payment / credit error)
curl -v https://api.telegram.org 可正常返回,但 Gateway 服务始终报错。
原因分析
- 服务进程未继承终端环境变量 :
hermes gateway通常以 systemd 用户服务方式运行,不会自动读取你终端里export的ALL_PROXY。 - 直接修改主服务文件无效 :手动编辑
/home/用户名/.config/systemd/user/hermes-gateway.service,每次服务启动(或执行hermes gateway install)时会被自动重置覆盖。
正确解决方案:使用 systemd drop-in 覆盖
systemd 提供了 drop-in 目录 机制,可以在不修改原始服务文件的前提下,添加或覆盖配置。
步骤
- 创建 drop-in 目录和覆盖文件
bash
mkdir -p ~/.config/systemd/user/hermes-gateway.service.d
cat > ~/.config/systemd/user/hermes-gateway.service.d/override.conf <<EOF
[Service]
Environment="ALL_PROXY=http://127.0.0.1:7890"
Environment="NO_PROXY=localhost,127.0.0.1"
EOF
请将
http://127.0.0.1:7890替换为你的实际代理地址。
- 重载 systemd 配置并重启服务
bash
systemctl --user daemon-reload
systemctl --user restart hermes-gateway.service
- 验证配置是否生效
bash
systemctl --user cat hermes-gateway.service
输出中会显示原始服务文件 + drop-in 覆盖内容。
- 查看日志确认问题解决
bash
journalctl --user -u hermes-gateway.service -f
此时 Telegram 和 OpenRouter 应能正常连接。
总结
| 错误做法 | 正确做法 |
|---|---|
直接修改 ~/.config/systemd/user/hermes-gateway.service |
创建 override.conf 进行配置覆盖 |
仅在终端 export ALL_PROXY |
在 systemd 服务的 Environment= 中设置代理 |
| 重启整个主机 | systemctl --user daemon-reload + restart |
核心原则:永远不要手动编辑由程序自动生成的服务文件,应使用 systemd 官方推荐的 drop-in 方式追加配置。