排障实录 :OpenClaw 升级失败三次,我是怎么把系统救回来的

2026-10-20 | 真实故障复盘 | 附完整命令


一句话结论

升级失败不是最可怕的,最可怕的是"看起来成功了"。

我遇到的是 npm install 退出码 0、日志显示 added 7 packages, changed 409 packages,但版本号从头到尾没变。


一、故障现象

想把 OpenClaw 从 2026.9.33 升到 2026.10.5。

第一次用官方更新入口:

bash 复制代码
gateway update.run

返回:

json 复制代码
{
  "status": "skipped",
  "reason": "managed-service-handoff-started",
  "handoff": { "command": "openclaw update --yes --channel extended-stable" }
}

看起来交出去了,实际上没有执行。

等了 20 分钟,检查版本:

bash 复制代码
openclaw --version
# OpenClaw 2026.9.33 (5873f81)   ← 一动不动

二、第一个根因:一次性计划任务早就过期了

查计划任务:

powershell 复制代码
Get-ScheduledTask | Where-Object { $_.TaskName -like "*OpenClaw*" }

结果里有个 openclaw-upgrade-933,查它的触发器:

powershell 复制代码
(Get-ScheduledTask -TaskName "openclaw-upgrade-933").Triggers
yaml 复制代码
StartBoundary : 2026-10-15T22:28:35+08:00

这是一次性任务,设定在 4 天前,今天根本不会再触发。

更新入口把活儿交给一个已经死了的任务,然后自己报 skipped 退出。

教训:遇到 skipped + handoff,先去看它交接给了谁,那个东西还活着吗。


三、第二个坑:把网关杀了,脚本也死了

改成自己写独立 PowerShell 脚本:

powershell 复制代码
# 停任务 → 杀进程 → npm install → 重启任务

结果脚本跑到 已杀进程: 46480 就断了,npm install 从未执行。

原因 :这个脚本是我通过网关的 exec 工具启动的,它是网关的子进程。杀掉网关 = 杀死自己的父进程,整棵进程树一起没了。

教训:任何需要重启网关的操作,绝不能让脚本挂在网关的进程树下面。


四、第三个坑:npm 的"假成功"

改成通过 Windows 计划任务跑(计划任务的父进程是系统服务,不会跟着网关死):

powershell 复制代码
schtasks /create /tn "OpenClawUpgrade105" `
  /tr "powershell.exe -NoProfile -ExecutionPolicy Bypass -File <脚本>" `
  /sc once /st 23:59 /f
schtasks /run /tn "OpenClawUpgrade105"

这次 npm install 真的跑了,日志显示:

复制代码
added 7 packages, removed 16 packages, and changed 409 packages in 2m
npm 退出码: 0

退码 0,看起来成功了。

但检查:

bash 复制代码
npm ls -g openclaw --depth=0
# `-- openclaw@2026.9.33     ← 还是旧版

翻 npm 完整输出,找到了原因:

kotlin 复制代码
npm warn install-scripts 5 packages have install scripts not yet covered by allowScripts:
  esbuild@0.28.2 (postinstall: node install.js)
  koffi@3.3.2 (install: node ./cnoke.cjs -P . -D src/koffi --prebuild --release)
  openclaw@2026.10.5 (postinstall: node scripts/postinstall-bundled-plugins.mjs)

npm 较新版本默认不执行 postinstall 脚本。 而 openclaw 的 postinstall-bundled-plugins.mjs 正是安装内置插件的关键步骤。

没有执行 postinstall = 装了个空壳。


五、但是------真正的拦截不是这个

加 --allow-scripts 重装,这次真的升到了 2026.10.5。

然后网关起不来。日志里:

sql 复制代码
Plugin openclaw-weixin cannot import openclaw/plugin-sdk/infra-runtime
(built with OpenClaw unknown; running core 2026.10.5)

查微信插件版本:

bash 复制代码
npm view @tencent-weixin/openclaw-weixin version
# 2.4.x

结论:微信插件 2.4.x 不兼容 10.5 内核,而 npm 上根本没有对应 10.5 的版本。

这不是配置问题,是上游没发版。再怎么折腾也没用。


六、回滚:三个必须检查的地方

升级失败后回滚,我踩了两个坑:

坑 1:数据库 schema 版本

10.5 启动时会自动迁移数据库:

  • state 库:v19 → v20
  • agent 库:v24 → v25

回滚代码后,旧版本会因为 schema 版本过高而拒绝启动。

解决:把 10 个数据库全部还原到升级前的备份。

powershell 复制代码
# 9 个 agent 库 + 1 个 state 库,逐个还原
Copy-Item "backup\openclaw-agent.sqlite" "agents\main\agent\" -Force
Copy-Item "backup\openclaw.sqlite" "state\" -Force

坑 2:残留的计划任务

我创建的那个 OpenClawUpgrade105 任务还留着,随时可能被再次触发,把健康的网关再打断一次。

bash 复制代码
schtasks /delete /tn "OpenClawUpgrade105" /f

坑 3:配置漂移

失败的升级过程改了配置。回滚后要逐项核对:

  • 模型清单
  • 插件列表
  • 通道配置

七、最终的体检清单(回滚后必做)

bash 复制代码
# 1. 版本
openclaw --version

# 2. 网关可达
openclaw status --deep

# 3. 数据库完整性(关键)
#     日志里搜 integrity_check,必须全部通过

# 4. 插件加载
#     日志里搜 plugin,确认没有 import 失败的

# 5. 通道
openclaw status  # 看 Channels 表格

我的实测结果:

makefile 复制代码
版本:     2026.9.33
网关:     22ms 可达
数据库:   10 个 sqlite,integrity_check 74 张表全部 healthy
插件:     21 个加载成功
微信通道: OK

八、四条可以抄走的经验

  1. skipped 不等于"交给别人了",等于"你需要去查那个别人是谁"。
  2. 重启网关的操作,不能跑在网关的进程树里。 用计划任务或独立服务。
  3. npm 退码 0 不等于装成功。 查 install-scripts 警告,查版本号本身。
  4. 回滚不是"把代码切回去"就完事。 数据库 schema、残留任务、配置漂移,三样都要查。

九、一句话总结

升级系统最大的风险不是升级本身,是"你以为升成功了,但实际上留下了一个半新半旧的状态"。

我现在这套系统跑的是 9.33(LTS 通道),数据库完整,通道正常。在微信插件支持 10.5 之前,不升。


所有命令和日志都是真实的,可复现。

相关推荐
不加辣椒1 小时前
第 14 章 控制项选型:成本模型与决策框架
人工智能
fanjianzhihui1 小时前
对话录音质检系统的工程实践:从语音识别到LLM判定的误差控制
人工智能·语音识别
程序员如山石1 小时前
AI主流开发环境搭建过程
人工智能·程序员
snakeshe10101 小时前
Linux 下 Ollama 完整实操指南:安装、部署大模型与开启远程访问
人工智能
FlowerJan101 小时前
ArcFace 相似度阈值别再抄 0.8 了
人工智能
阿里云大数据AI技术1 小时前
StarRocks 与 Fluss 用一条 SQL 查实时与历史
人工智能·sql
AICoder码农王1 小时前
如何写 Skill 第6课,分诊五连问:skill 看病指南
人工智能
绿意新酿1 小时前
长线学习-4
人工智能
大明二代1 小时前
Mastra RAG 进阶:使用 Drizzle ORM 和 pgvector 实现文档版本管理与 Version-aware Retrieval
人工智能