Ubuntu 环境下为 systemctl 用户服务配置代理(以 OpenClaw 访问 Telegram 为例)
在使用 Ubuntu 部署服务时,如果你的程序(如 OpenClaw)需要连接 Telegram 这种受限网络,通常需要开启代理。
但由于 systemctl --user 启动的服务环境是独立的,直接修改
.bashrc 往往无效。
本文将记录如何通过常规方式配置代理,以及在常规方式失效时,如何通过“手动暴力法”确保配置生效。
一、 常规配置方式(推荐优先尝试)
Systemd 提供了一个内置命令 edit
来处理服务环境变量的覆盖。
1. 执行编辑命令
在不使用 sudo 的情况下(因为是用户级服务),运行:
1 | |
2. 写入代理配置
在打开的编辑器(通常是 nano 或 vim)中,粘贴以下内容:
1 | |
注:7897 为 Clash Verge Rev 的默认端口。
3. 保存并重载
nano:
Ctrl+O保存,Enter确认,Ctrl+X退出。重载:
1
2systemctl --user daemon-reload
systemctl --user restart openclaw-gateway.service
二、 验证配置:问题出现了?
配置完成后,我们通常需要验证环境变量是否真的注入到了服务中。
验证命令
1 | |
可能遇到的坑
很多时候你会发现:
grep出来的内容为空。再次执行
systemctl --user edit,发现里面还是空的。检查补充配置目录,发现文件根本没生成:
1
2cat ~/.config/systemd/user/openclaw-gateway.service.d/override.conf
# 报错:No such file or directory
这通常是因为编辑器权限、环境变量 $EDITOR 设置不当,或者
systemctl edit 的交互机制导致保存未成功。
三、 终极方案:手动创建覆盖配置文件
如果常规命令失效,直接通过命令行手动创建配置文件是最稳妥的。这种方法绕过了编辑器,确保文件 100% 存在。
1. 强制创建配置目录
1 | |
2. 使用 cat 命令写入配置
直接将配置内容“打入”文件:
1 | |
3. 彻底生效
执行重载操作,让系统强制读取刚才手动创建的文件:
1 | |
4. 再次验证
再次运行验证命令:
1 | |
此时你应该能看到 Environment=HTTP_PROXY=...
的输出,这标志着 OpenClaw 现在已经可以借由 Clash 的通道访问 Telegram
接口了。
总结
对于 Systemd 用户服务:
- 环境变量不在
.bashrc里,而在override.conf里。 - 工具失效时,不要纠结,直接去
~/.config/systemd/user/目录下手动建文件夹和文件。 - 重载命令
daemon-reload是每次修改后的必备动作。
Ubuntu 环境下为 systemctl 用户服务配置代理(以 OpenClaw 访问 Telegram 为例)
https://www.haoyizebo.com/posts/19290315/