Install
openclaw skills install @tangsuann/gateway-restart-messageOpenClaw gateway 重启标准流程:五道校验门(Gate0-4)+自杀进程规避+continuationMessage回执,通用
openclaw skills install @tangsuann/gateway-restart-message适用于任何 OpenClaw agent。涉及 gateway 重启操作时加载并遵循此流程。 核心:改 openclaw.json 走五道校验门(Gate0-4),全绿才重启;重启用平台工具托管 + 自动回执, 绝不在会话内裸跑会自杀进程的复合命令。
教训:
python3 -m json.tool和openclaw config validate都只验"格式合法", 不验"模型真的能调用"。曾出现 JSON 合法、config validate 通过, 但因为模型只写进agents.defaults.models白名单、没写进models.providers.<provider>.models[],运行时静默 fallback 到别的模型。 所以校验必须分门逐层,缺一不可。
改动涉及不确定的配置字段前,先查官方文档或本机实现确认字段名、取值、语义, 不要凭印象改。这是"改对方向"的前提,不能跳。
cp openclaw.json openclaw.json.bak # 先备份
python3 -m json.tool openclaw.json > /dev/null
.bak,不准重启,汇报授权用户openclaw config validate
改动只要碰到 agents.defaults.model、agents.defaults.models、
agents.list[].model、或任何 cron 的 payload.model,必须逐个核对模型引用
都在 provider 层真正注册:
openclaw models list # primary/fallback 引用的模型是否都可用
openclaw models aliases list # 每个 alias 的目标是否真实存在于 catalog
核对要点:
models.providers.<provider>.models[] 找到注册任一模型引用查不到 provider 注册 → 视为失败,先补齐注册再重启。
Gate0-3 全绿 + 授权用户已确认 → 才能进入本门。见下节"如何重启"。
教训:不要在 agent 会话内直接执行
openclaw gateway stop && openclaw gateway start。stop一旦生效会立即杀掉当前 agent 自己的进程,&&后面的start根本没机会执行, 也拿不到返回值——结果是只 stop 没 start,要人工补 start。
做法 A(推荐):调用 gateway 工具,平台托管重启 + 自动回执
gateway restart:
note: "简短说明本次改动内容"
continuationMessage: "重启完毕。[改动简述],[后续状态]。"
gateway 工具由平台在新进程里托管重启,continuationMessage 在重启后由新进程自动投递,
不依赖被杀掉的旧进程。这是会话内触发重启唯一安全的方式。
做法 B(会话外 / 确需 shell):单条 restart,绝不用 stop && start
openclaw gateway restart
单条 restart 是原子操作,不会在两步之间自杀。但发出后当前进程仍会被终止——
不能在同一回合声称"重启成功",只能说"已发出重启指令",由新进程或事后检查确认结果。
会话内自触发重启的授权条件(三者同时满足):
不满足任一条 → 走会话外 / 外部终端手动重启。
continuationMessage 铁律:
重启完毕。fallback 链已从 A 模型切到 B 模型,下次定时任务会走新链。| 问题 | 解法 |
|---|---|
| 改错 JSON 导致 gateway 起不来 | Gate1 备份 + JSON 语法校验 |
| 配置结构不合法 | Gate2 schema 校验 |
| JSON 合法但模型没注册,运行时静默 fallback | Gate3 模型可调用性校验 |
会话内 stop && start 自杀进程,start 没跑 | 用 gateway 工具托管重启,或单条 restart |
| 重启后不知道好了没 | continuationMessage 自动回执 |
systemd override.conf 绝对不允许自行修改(改错会失联)。