banner
约 900 字
3 分钟

OpenClaw 升级后失联:Node.js 版本不兼容故障排查与修复

摘要

OpenClaw 升级到 v2026.7.1-2 后因 Node.js 版本要求提升,systemd 服务使用系统自带的旧版本 v22.22.1 导致启动失败并触发 systemd 熔断。通过创建 nvm current 链接、修改服务路径、设置 nvm default 别名三步修复,同时梳理了多版本共存的最佳实践。

OpenClaw 升级后失联故障排查与 Node.js 版本管理

2026-08-19 | 服务器:srv-n100 (Ubuntu, Linux 6.17.0-41-generic)

一、故障现象

OpenClaw(本机 Node.js 部署)在升级至 v2026.7.1-2 后出现「失联」——即 Telegram Bot 无法响应,Gateway 无法通过 18789 端口访问。


二、排查过程

Step 1:确认服务状态

bash
systemctl --user status openclaw-gateway

输出:

纯文本
○ openclaw-gateway.service - inactive (dead) since Mon 2026-08-17 11:49:20 CST; 2 days ago
Main PID: 4342 (code=exited, status=1/FAILURE)

Step 2:查看崩溃日志

bash
journalctl --user -u openclaw-gateway --no-pager -n 30

关键错误:

纯文本
openclaw requires Node >=22.22.3 <23, >=24.15.0 <25, or >=25.9.0.
Detected: node 22.22.1 (exec: /usr/bin/node).

连续启动 6 次后触发 systemd 熔断策略(StartLimitBurst=5),服务进入永久 dead 状态。

Step 3:梳理服务器上所有 Node.js 实例

bash
which -a node                # → 仅有 /usr/bin/node
node --version               # → v22.22.1
ls ~/.nvm/versions/node/     # → v24.19.0  v26.6.0

发现:系统 apt 自带 Node 22.22.1(最低版本),而 nvm 已安装了 v24.19.0 和 v26.6.0,但 nvm 未设置 default alias,导致 shell 中的 node 始终解析为系统 v22.22.1,systemd 服务 PATH 里虽有 nvm 路径但 ~/.nvm/current 软链接也不存在。

Step 4:验证 nvm 可用性

bash
source ~/.nvm/nvm.sh && nvm ls
# → v24.19.0  v26.6.0(均未设为 default)

当天日志曾以 runtimeVersion: 24.19.0 运行过,说明临时手动指定过 nvm 版 node,但重启后失效。


三、修复措施

Fix 1:创建缺失的 nvm current 链接

服务 systemd 配置中 PATH 包含 $HOME/.nvm/current/bin,但该路径从未建立:

bash
ln -sfn ~/.nvm/versions/node/v24.19.0 ~/.nvm/current

Fix 2:修改 systemd 服务文件

编辑 ~/.config/systemd/user/openclaw-gateway.service

diff
- ExecStart=/usr/bin/node ~/.npm-global/lib/node_modules/openclaw/dist/index.js gateway --port 18789
+ ExecStart=~/.nvm/current/bin/node ~/.npm-global/lib/node_modules/openclaw/dist/index.js gateway --port 18789

Fix 3:设置 nvm default 别名

bash
nvm alias default 24
# → default -> 24 (-> v24.19.0)

Fix 4:重启服务

bash
systemctl --user daemon-reload
systemctl --user reset-failed openclaw-gateway
systemctl --user start openclaw-gateway

四、修复后验证

bash
systemctl --user status openclaw-gateway
# ● active (running)  node v24.19.0  memory 483M

curl -s -o /dev/null -w "HTTP %{http_code}" http://127.0.0.1:18789/
# → HTTP 200

# Bot 已恢复,日志显示正常轮询消息

五、Node.js 版本管理最佳实践

当前服务器版本分布

版本

来源

路径

用途

v22.22.1

apt 系统包

/usr/bin/node

系统后备,其他系统组件依赖

v24.19.0

nvm

~/.nvm/versions/node/v24.19.0

当前主力(OpenClaw、交互终端)

v26.6.0

nvm

~/.nvm/versions/node/v26.6.0

备用

推荐的三层隔离策略

  1. 交互/脚本命令 → 靠 nvm default 控制:新开终端自动切到 v24

  2. systemd 服务 → 用绝对路径,不受 nvm 切换影响:~/.nvm/current/bin/node

  3. 全局工具 → 装到 ~/.npm-globalnpmrc 已设 prefix),与版本解耦

未来升级 Node 版本的流程

bash
nvm install 26 && nvm alias default 26
ln -sfn ~/.nvm/versions/node/v26.6.0 ~/.nvm/current
systemctl --user restart openclaw-gateway

注意事项

  • ~/.npmrc 中的 prefix 配置是有意为之,不要执行 nvm 提示的 nvm use --delete-prefix,否则会破坏全局工具共享架构

  • systemd 的 Restart=always + StartLimitBurst=5 是双刃剑:能自动恢复单次失败,但连续快速失败会触发永久 dead;建议配合健康检查(如 curl 端口探测)使用

  • 保留 apt 自带的 Node 22.22.1 不动,部分 Ubuntu 系统工具仍依赖它

END