OpenClaw 升级翻车记:一个 Node 版本号搞崩了整个服务
昨晚折腾 OpenClaw 升级,结果翻车了。
升级完一重启,网关服务直接挂了,systemd 那边疯狂报错,怎么都起不来。
心想不就是个升级嘛,能出啥幺蛾子?
结果还真就出事了。
🔍 现象:升级后服务起不来
升级完成后,照例重启服务:
systemctl restart openclaw-gateway
然后:
systemctl status openclaw-gateway
状态:failed。
翻日志一看,报错大意是:
Node version mismatch.
Required >=22.22.3, got 22.22.2
好家伙,就差了一个小版本号,服务直接罢工。
🤔 排查:问题到底出在哪?
关键问题是——我明明已经下载了 Node 22.22.3,但 systemd 服务用的还是旧的 22.22.2。
原因很简单:
systemd 启动服务时,调用的是 /usr/bin/node,这个路径指向的是系统包管理器安装的旧版本。而我新下载的 Node 22.22.3 装在了别的路径下。
所以虽然终端里 node -v 可能已经显示新版本了,但 systemd 它不认你那个新路径,它就认 /usr/bin/node。
这就是典型的”你以为升级了,但系统不这么认为”的问题。
🔧 修复方案
两种办法,选一个就行:
方案一:通过 apt 升级系统 Node(推荐)
最干净的方式,直接把系统的 Node 升上去:
# 更新包索引
sudo apt update
# 升级 Node 到 22.22.3
sudo apt install nodejs=22.22.3-*
升级完验证一下:
/usr/bin/node -v
# 应该输出 v22.22.3
方案二:手动替换 /usr/bin/node
如果 apt 源里暂时没有新版本,那就手动来:
# 先找到你下载的新版 Node 路径
which node
# 备份旧版本
mv /usr/bin/node /usr/bin/node.bak
# 创建软链接指向新版本
(假设新版本在 /usr/local/bin/node)
ln -s /usr/local/bin/node
/usr/bin/node
验证:
/usr/bin/node -v
# 应该输出 v22.22.3
✅ 最后一步:重载并重启
不管用哪种方案,最后都要让 systemd 重新加载并重启服务:
# 重载 systemd 配置
systemctl daemon-reload
# 重启网关服务
systemctl restart openclaw-gateway
# 检查状态
systemctl status openclaw-gateway
看到 active (running) 就说明搞定了 🎉
💡 踩坑总结
说几点感想:
-
版本号再小也是版本号。22.22.2 和 22.22.3 看着差不多,但 OpenClaw 新版本硬性要求 >=22.22.3,差一点都不行。
-
systemd 用的路径和你的终端不一定一样。终端里
node -v没问题不代表服务也没问题,得看/usr/bin/node -v。 -
升级前先查依赖要求。如果提前看一眼 changelog 里的 Node 版本要求,就不至于升级完才发现服务起不来。
- 说实话这种问题不复杂,但就是容易卡住——因为你本能地觉得”我已经升级了啊”,结果忽略了 systemd 引用路径这个细节。
以后升级开源工具,先看依赖要求,再升级依赖,最后升级本体。 这个顺序记住,能少踩不少坑。
我是阿健,一个在AI时代折腾的普通人。每天折腾点新东西,踩坑了就说,搞定了就分享。关注公众号「2026阿健」,一起探索AI改变生活的可能性。
夜雨聆风