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,习惯性敲下:
openclaw gateway restart
然后就没有然后了。

死亡螺旋

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
kill -USR1 $(pgrep -f "openclaw")
跑完之后,我盯着终端看了几秒。没有报错。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
写成一行脚本,日常用起来就是:
# 改完配置后 kill -USR1 $(pgrep -f "openclaw gateway")
就这么简单。

几个坑

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

写在最后

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