Ubuntu 环境下为 systemctl 用户服务配置代理(以 OpenClaw 访问 Telegram 为例)

在使用 Ubuntu 部署服务时,如果你的程序(如 OpenClaw)需要连接 Telegram 这种受限网络,通常需要开启代理。

但由于 systemctl --user 启动的服务环境是独立的,直接修改 .bashrc 往往无效。

本文将记录如何通过常规方式配置代理,以及在常规方式失效时,如何通过“手动暴力法”确保配置生效。

一、 常规配置方式(推荐优先尝试)

Systemd 提供了一个内置命令 edit 来处理服务环境变量的覆盖。

1. 执行编辑命令

在不使用 sudo 的情况下(因为是用户级服务),运行:

1
systemctl --user edit openclaw-gateway.service

2. 写入代理配置

在打开的编辑器(通常是 nano 或 vim)中,粘贴以下内容:

1
2
3
4
[Service]
Environment="HTTP_PROXY=http://127.0.0.1:7897"
Environment="HTTPS_PROXY=http://127.0.0.1:7897"
Environment="NO_PROXY=localhost,127.0.0.1"

注:7897 为 Clash Verge Rev 的默认端口。

3. 保存并重载

  • nanoCtrl+O 保存,Enter 确认,Ctrl+X 退出。

  • 重载

    1
    2
    systemctl --user daemon-reload
    systemctl --user restart openclaw-gateway.service

二、 验证配置:问题出现了?

配置完成后,我们通常需要验证环境变量是否真的注入到了服务中。

验证命令

1
systemctl --user show openclaw-gateway.service | grep Environment

可能遇到的坑

很多时候你会发现:

  1. grep 出来的内容为空。

  2. 再次执行 systemctl --user edit,发现里面还是空的。

  3. 检查补充配置目录,发现文件根本没生成:

    1
    2
    cat ~/.config/systemd/user/openclaw-gateway.service.d/override.conf
    # 报错:No such file or directory

这通常是因为编辑器权限、环境变量 $EDITOR 设置不当,或者 systemctl edit 的交互机制导致保存未成功。

三、 终极方案:手动创建覆盖配置文件

如果常规命令失效,直接通过命令行手动创建配置文件是最稳妥的。这种方法绕过了编辑器,确保文件 100% 存在。

1. 强制创建配置目录

1
mkdir -p ~/.config/systemd/user/openclaw-gateway.service.d/

2. 使用 cat 命令写入配置

直接将配置内容“打入”文件:

1
2
3
4
5
6
cat <<EOF > ~/.config/systemd/user/openclaw-gateway.service.d/override.conf
[Service]
Environment="HTTP_PROXY=http://127.0.0.1:7897"
Environment="HTTPS_PROXY=http://127.0.0.1:7897"
Environment="NO_PROXY=localhost,127.0.0.1"
EOF

3. 彻底生效

执行重载操作,让系统强制读取刚才手动创建的文件:

1
2
systemctl --user daemon-reload
systemctl --user restart openclaw-gateway.service

4. 再次验证

再次运行验证命令:

1
systemctl --user show openclaw-gateway.service | grep Environment

此时你应该能看到 Environment=HTTP_PROXY=... 的输出,这标志着 OpenClaw 现在已经可以借由 Clash 的通道访问 Telegram 接口了。

总结

对于 Systemd 用户服务:

  1. 环境变量不在 .bashrc 里,而在 override.conf 里。
  2. 工具失效时,不要纠结,直接去 ~/.config/systemd/user/ 目录下手动建文件夹和文件。
  3. 重载命令 daemon-reload 是每次修改后的必备动作。

Ubuntu 环境下为 systemctl 用户服务配置代理(以 OpenClaw 访问 Telegram 为例)
https://www.haoyizebo.com/posts/19290315/
作者
一博
发布于
2026年2月1日
许可协议