ARTICLE · 1101168
升个 OpenClaw,我四天翻了四次船,最后靠这几条爬上岸.
OpenClaw8月31日更新v2026.8.1 (也叫OpenClaw 2.0)版以来,先后更新了8.2、9.1、9.2、9.3、9.4、9.5、9.6等几个版本。由于是破坏性的更新,从v2026.7.1升级到v2026.8.1,我把一些基础的东西没有处理好,导致后续升级问题不断。
就这四天,我干了一件事,把 OpenClaw 从 9.5 升到 9.6。
就这么一件事。结果它让我四天里,结结实实尝了四次升级失败,而且每一次,死法还不一样。
第一次,它卡在门口,说「我没权限停你那个服务」。第二次,它跑了一半,突然说「我配置没了」。第三次,它说「你的依赖我解不开」。第四次,它倒是装上了,装完它自己肚子里又埋了个雷。
我寻思了一下,我没寻思明白,为什么升个版本,能升出这么一出连续剧。
然后我花了两天,把它的底给扒干净了。
今天这篇,就是我把压箱底的东西掏出来给你。你不知道对大家有没有用,反正我自己是被折腾得够呛,但既然折腾完了,总得把这几天的血,攒成点东西。你先听故事,故事讲完,我把那几条要敲进终端的命令,原原本本给你摆出来。你下次自己升的时候,照着做,大概率不会像我一样,一头撞在墙上。
先说个前情。OpenClaw 这玩意,我自己用了挺久了。它最让我上头的地方,是能自动执行定时任务。我每天早上有个早报自动发 QQ,晚上有个全天记忆整理,版本检查的活儿,全挂着定时任务,人不动,它自己跑。
9.6 是 9 月 23 号官方发的。我那个「版本更新检测」的定时任务,每天早上五点半都会跳出来告诉我,有新版本。
我就手痒了。
我这个人有个毛病,一看到新版本就想点。我记忆本里都给自己立过规矩了,别手滑升级,先判断值不值。但那天还是点了。
点完之后我才反应过来,我这是把一只蟹,从 9.5 的壳,往 9.6 的壳里塞。
对,蟹。你别笑,OpenClaw 自己的口号就写着,蜕壳,不过是螃蟹的版本号游戏。这个 slogan 我当时没当回事,折腾完这四天,我是真懂它什么意思了。这个回头再说,先讲我怎么翻的船。
第一次,它没让我进门。
我点升级,它在最开头那步就停住了。报的意思差不多是,「我没法停你那个正在跑的服务」。
我一开始以为是网络,或者权限不够。折腾半天没折腾明白。
后来扒到底了。问题出在我那个计划任务上。OpenClaw 在 Windows 上,是靠一个叫 OpenClaw Gateway 的计划任务来跑那个后台服务的。我那个任务,是个普通权限的任务,它要停这个任务,得管理员级的手,我那个不够格,就被拒了。
怎么确认我那个是不是普通权限的,我查它返回的 XML,看里面 LogonType 写的是 InteractiveToken,就是交互令牌,普通用户那档。再一看 RunLevel,压根没有这行,那就铁了心是个没升过级的任务。要修,就是拿管理员身份把它重建成管理员级,下面那两条命令就是。
这一关,卡了我一夜。
过了这一关,出了第二关。
我换了个路子,从干净的终端里触发。它倒是能走了,走到大半,突然说,「我配置没了」。
我那个配置我天天在用,好端端在那放着,它跟我说没了。
后来我发现,是我自己手贱,同时开两个 Gateway。一个是计划任务拉起来的,一个是我手动在前台 run 的。两个一起跑,它升级的时候要停那个「占着坑的」,结果停的是我手动那个,手动那个没有正经的服务身份,它就懵了,交接不上,直接回滚。
要躲开这一关,升级前得先确认你只有一个 Gateway 在跑。我那个排查,就是把所有 node 进程列出来,看命令行里带不带 gateway run,带就说明有人手动在前台开着,那个得先关掉,让计划任务做唯一的主人。
这一关,也卡了我半天。
然后是第三关,这个最气。
我把上面两个问题都解决了,想给它补个缺的 lockfile,让它依赖关系完整点。结果 npm 直接给我甩一脸报错,说你的依赖我解不开,两个版本打架,我拒装。
我当时就有点上头了。我寻思,不就是补个文件吗,至于吗。
直到我翻到官方文档里一句话。文档里白纸黑字写着,这个项目最好用 pnpm 管依赖,用 npm 装,会慢、会大、会踩坑。我那个 OpenClaw,是当年用 npm 全局装法装上的,先天就缺个 lockfile,它本来就不该走 npm 这条补救路。
我这条路,从一开始就是死的。
到这一步,我是真有点心虚了。
你想想看,升一个版本,要我先搞懂它那个后台服务是什么权限,要我先关掉我手动多开的那个,还要我别走错依赖管理这条路。
这不是升级,这是做手术。9.5 之前,升级是按一下按钮,几分钟完事。9.5 之后,它多了快照、多了迁移核对、多了服务交接,一下变成了要全程盯着的一台机器。
我把那 1.36 个 G 的会话归档手动删了,把那个计划任务用管理员权限重建成管理员级,最后走官方那个安装脚本,它内部是用 pnpm 管的,依赖这一关就这么过去了。
删归档那刀,是把整个 session-sqlite-import-archive 目录删掉。这目录是 9.4 之后留下的历史迁移存档,每次升级它都要做完整性核对,1.36 个 G 能拖住十一分钟。删了它就快了。唯一的代价,是你丢「退回纯文件版会话」那条后路,但 SQLite 那个主库才是权威数据,这条后路我自己评估下来,能舍。
9.6,落地了。
我当时松了口气。
结果你猜怎么着。
我升上去了,以为万事大吉,结果它自己肚子里,埋了个更大的雷。
我那些定时任务,全崩了。报错是一句我看了半天才看懂的,克隆失败,有个东西克隆不了。我查了半天,查到了官方的 GitHub 上,发现,好家伙,不止我一个人。
一堆人,就这两天,报的是一模一样的错。官方已经把它定性成 9.6 的回归,就是新版本反而把旧版本能跑的东西搞坏了。修它的补丁,写好了,挂着,还没合进去。
我这就有点哭笑不得了。我花了四天,翻过四道坎,把 9.6 请进家门,结果它进门的时候,把自家门廊上的四个盆栽,全给我碰倒了。
那四个盆栽,就是我的早报、我的版本检测、我的记忆整理、我的凌晨记忆归档。现在全歪了,我得等官方把门廊修好。这段你暂时也别急着修,等官方把补丁合进去发新版本,你升完,把那四个定时任务重新启用就行。
说真的,我讲这么多翻船,你可能就想知道一件事,那我自己到底是怎么处理的。
我把压箱底的那套,掏给你。升级这件事,我把它拆成三段,升级前查一遍,升级时挑一条路走,升级完跑五连。下面这些命令,都是我自己这几天亲自用过的,你直接复制,按顺序敲。
升级前那五分钟,就查四样东西。查完,八成能躲开前面那些坑。
第一样,查你那个 OpenClaw Gateway 计划任务是不是管理员级。
schtasks /Query /TN "OpenClaw Gateway" /XML看它 XML 里 RunLevel 写的是不是 HighestAvailable,LogonType 写的是不是 Password。两个都满足,这关就过了。缺了就用下面这条重建,注意 /RP 后面填你那个 Windows 登录密码。
schtasks /Create /TN "OpenClaw Gateway" /SC ONLOGON /TR "C:\Users\你的用户名\.openclaw\gateway.vbs" /RU 你的用户名 /RP 你的密码 /RL HIGHEST /F这条跑完,那密码就留在终端历史里了,你随手把历史清一下。
第二样,确认你没同时开两个 Gateway。
Get-CimInstance Win32_Process -Filter "Name like 'node%'" | Where-Object { $_.CommandLine -match "openclaw.*gateway run" }有输出,就说明有人手动在前台开着,那个得先关掉。
第三样,看看那个会话归档大不大,大的话删了。
dir "C:\Users\Lenovo\.openclaw\agents\main\session-sqlite-import-archive"超过几百 M,就别犹豫了。
Remove-Item "C:\Users\Lenovo\.openclaw\agents\main\session-sqlite-import-archive" -Recurse -Force第四样,做一份 sqlite 备份,这是你回滚的底。全量那个备份在 Windows 上跑得慢,几十秒的 sqlite 版就够用。
openclaw backup sqlite create --global --repository D:\OpenClawBackups\sqliteopenclaw backup sqlite create --agent main --repository D:\OpenClawBackups\sqlite然后触发升级。
我这两天摸出来两条路。第一路最省事,你的 lockfile 是全的、依赖是干净的,你就直接敲下面这条。
openclaw update --yes它要是走到一半,报那种 npm 依赖解不开、缺 lockfile 之类的错,那这块需要注意一下,你换第二路。第二路是官方那个安装脚本,它内部用 pnpm 管依赖,能绕开 npm 那套死结。
& ([scriptblock]::Create((iwr -useb https://openclaw.ai/install.ps1))) -NoOnboard这个 -NoOnboard,就是告诉它别带你重新走一遍初始化,老机器上装完,直接收工。
升级完,跑这套五连。我把它排成一条时间线,你跟着敲就行。
第一阶段,Gateway 还跑着的时候,先做三件。
第一条,把配置修齐。升级之后,配置、schema、插件版本都可能没收敛,这条就是把它拉齐。它要独占访问的时候会自己把服务停一下再拉起来,你看到对话断一下,别慌,是它自己。
openclaw doctor --fix第二条,把上次没跑完的收尾补完。要是你哪次升级中途崩了,核心其实已经换上了,但后面那几步没收尾,这条就是专门补这个的。升级顺的时候这条会告诉你没啥要补的,那也跑了,无害。
openclaw update repair第三条,做个全面体检,问自己一句,我这系统到底坏没坏。
openclaw doctor --non-interactive第二阶段,压两个数据库。这一步得先把 Gateway 停掉,不然它抢不到锁,会直接报错拒你。
先停,再备份一份,再压。
openclaw gateway stopopenclaw backup sqlite create --global --repository D:\OpenClawBackups\sqliteopenclaw backup sqlite create --agent main --repository D:\OpenClawBackups\sqliteopenclaw doctor --state-sqlite compactopenclaw doctor --session-sqlite compact --session-sqlite-agent main --json这两条 compact,一条压全局那个库,一条压 main 那个会话库。压完之后你跑 openclaw status,看那行 SQLite 打开速度,如果从十几秒掉到几秒,就是压进去了。
第三阶段,把 Gateway 拉回来,再验一次。
openclaw gateway startopenclaw status最后,回到开头那只蟹。
OpenClaw 那个口号,蜕壳,不过是螃蟹的版本号游戏。我当时觉得,这是句俏皮话。
折腾完这四天,我改主意了。它不是俏皮话。
你见过蟹蜕壳吗。它一辈子最要命的时刻,就是换壳那一下。旧壳脱了,新壳还没硬,它软得像一摊,没有防御,随便谁来都能要它的命。它得找个安全的地方,躲着,等那层新壳一点点硬起来,才敢重新横着走。
升级,就是那个软壳期。
你在软壳期,任何一个旧世界的习惯,都可能要你的命。当年 shell 装法留下的那个缺 lockfile,是我软壳上的一个洞。我手动多开的那个 Gateway,是另一个洞。我那个普通权限的计划任务,又是一个洞。
我在软壳期,同时开着一堆洞,还一头栽进去,能不翻船吗。
等你把壳硬化了,把那几个洞补上了,你才能重新横着走。所以你看,工具在升级,其实在逼你把自己也升级一遍。你的环境、你的习惯、你的那套权限和备份,都得跟着一起蜕一层。工具换代很快,但你家那套地基,是你自己的,它不帮你换。
下次你看到新版本,先别手痒。花五分钟,跑一遍我上面那四条升级前检查,再看看你依赖是怎么装的。省你四天。
本文基于 OpenClaw v2026.9.6 版本。
以上,如果觉得不错,随手点个赞、在看、转发三连吧,如果想第一时间收到推送,也可以给我个星标⭐~谢谢你看我的文章,我们,下次再见。
我的Openclaw教程