#0145 别重启了,你的 Gateway 会热reload

type
Post
status
Published
date
Mar 12, 2026
slug
321a745569bb8191b4c3f2c0a6130a25
summary
我用 OpenClaw 搭了套 AI 自动化系统,跑在 Mac Mini 上,7×24 小时运行。Discord 接指令,Agent 干活,一切看起来很美好——直到我需要改个配置。
tags
交易
思考
工具
category
技术
icon
password

别重启了,你的 Gateway 会热reload

一个让我抓狂两周的问题

我用 OpenClaw 搭了套 AI 自动化系统,跑在 Mac Mini 上,7×24 小时运行。Discord 接指令,Agent 干活,一切看起来很美好——直到我需要改个配置。
改完 openclaw.json,习惯性敲下:
然后就没有然后了。

死亡螺旋

gateway restart 的底层逻辑是先 launchctl bootout 停掉服务,再 bootstrap 拉起来。听起来很合理,但实际跑起来是这样的:
  • bootout 成功了,服务停了
  • bootstrap 超时,服务没拉起来
  • 这时候服务状态变成 "not loaded"
  • 再跑 restart?报错 "not installed"
  • 再跑 restart?还是 "not installed"
  • 死循环,恭喜你
好,那我用 openclaw gateway install --force 重新装一遍总行了吧?装是装上了,但有时候它不自动启动。你得再手动 start 一下。整个流程从 30 秒变成了 3 分钟的人工操作。
这还不是最离谱的。

自杀式修复

OpenClaw 有个 doctor --fix 命令,专门修这类服务状态问题。它确实能修好。但问题是——我的 Agent 跑在哪里?跑在 gateway 进程里。
从 Discord 给 Agent 发指令:"帮我跑一下 openclaw doctor --fix"。Agent 收到指令,开始执行,doctor 先 bootout 当前服务……
等等,当前服务就是你自己啊兄弟。
bootout 一执行,gateway 进程死了,Agent session 断了,Discord 连接没了。doctor 的后半段——bootstrap 新服务——根本没人执行了。
这就是经典的"让一个进程杀掉自己然后复活自己"的悖论。
TUI(终端界面)倒是没这个问题,因为它是独立进程,不跑在 gateway 里。但我总不能每次改个配置都去开终端手动操作吧?那我搭这套自动化系统图啥?

翻代码,找出路

既然常规路径走不通,那就看看有没有非常规的。
我开始翻 OpenClaw gateway 的进程信号处理逻辑。Unix 系统里,进程可以注册各种信号处理器。SIGTERM 是优雅退出,SIGHUP 传统上用来重载配置,那 OpenClaw 用的是什么?
答案是 SIGUSR1
跑完之后,我盯着终端看了几秒。没有报错。Discord 那边 Agent 还在线。进程 PID 没变。
然后 gateway 日志里刷出一串重载信息:config 重新读取,channels 重新连接,sessions 保持。
它活着,而且刷新了。

热重启 vs 冷重启

搞清楚机制后,使用场景就很明确了:
日常配置变更 → SIGUSR1 热重启
  • 改了 openclaw.json 里的 model、channel 配置、agent 绑定等
  • kill -USR1 <pid> 搞定
  • 进程不死,PID 不变
  • Agent session 不中断,Discord 连接保持
  • 整个过程对用户无感
版本升级 → 完整重启
  • npm 装了新版本,需要加载新代码
  • 热重启只重载配置,不换代码,这种场景不适用
  • 老老实实用 openclaw update --yes,让内置 updater 处理
  • 升级后如果服务状态有问题,终端里跑 openclaw doctor --fix
写成一行脚本,日常用起来就是:
就这么简单。

几个坑

  • 别用 SIGHUP。有些程序用 SIGHUP 重载配置,但 OpenClaw 不是。发错信号可能直接杀进程。
  • 确认 PID 对不对pgrep 可能匹配到多个进程,确保你发给的是 gateway 主进程。
  • 热重启不是万能的。如果你改了监听端口或者底层传输层配置,可能还是得冷重启。
  • 从 Agent 内部也能执行。这才是最爽的地方——因为进程不死,Agent 可以自己给自己发 SIGUSR1,改完配置自己刷新,不会自杀。

写在最后

这个问题本身不复杂,但踩坑的过程挺有代表性。跑在 gateway 里的 Agent 不能重启 gateway 本身,这种"自指"问题在 AI Agent 系统里会越来越常见。
你的 Agent 能不能重启自己运行的环境?能不能升级自己依赖的框架?这些问题在传统软件里不存在,因为没有一个程序会试图自己重启自己。但 AI Agent 不一样,它会尝试一切它觉得合理的操作。
热重启是个优雅的绕行方案:不杀进程,就不存在自杀问题。
记住这个信号:SIGUSR1。下次改完配置,别 restart 了。
Loading...

© xiyu 2013-2026