Zhi Wei 的个人博客
解决 OpenClaw CLI 报错:Error: gateway closed (1000) 握手超时问题
解决 OpenClaw CLI 报错:Error: gateway closed (1000) 握手超时问题

解决 OpenClaw CLI 报错:Error: gateway closed (1000) 握手超时问题

如果你在使用 OpenClaw CLI 时(特别是在执行了 openclaw reset full 或者更新版本之后),使用openclaw CLI在网关所在设备进行操作的时候,比如openclaw logs/devices 突然遇到了下面这个让人摸不着头脑的错误:

[openclaw] Failed to start CLI: Error: gateway closed (1000 normal closure): no close reason
Gateway target: ws://127.0.0.1:28668
Source: local loopback

别急着重装或者疯狂排查端口占用,这很可能根本不是配置丢失或端口冲突的问题!

🔍 问题根源:WebSocket 握手超时

乍一看,错误码 1000 normal closure 没有任何指向性。但如果你去查看 Gateway 的后台日志,很可能会发现这样的记录:

"cause":"handshake-timeout", "closed before connect", "handshakeMs":3003

真相大白: 这其实是 Gateway 服务的一个 WebSocket 握手超时机制导致的。在部分 OpenClaw 版本中,默认的握手超时时间被设定得极其短暂(大约 3 秒)。如果 CLI 没能在 3 秒内发送初始的 connect 帧完成协议握手,Gateway 就会冷酷无情地直接切断连接。

🛠️ 解决方案:延长响应时间变量

既然是超时,我们只需要在服务启动时注入环境变量,放宽这个限制即可搞定。如果你是通过 systemd 管理 OpenClaw Gateway 的,可以通过添加 drop-in override 文件来解决。

操作步骤如下:

第一步:编辑 systemd 服务 在终端运行以下命令,打开服务覆盖配置:

systemctl --user edit openclaw-gateway.service

[Service]
Environment=VITEST=1
Environment=OPENCLAW_TEST_HANDSHAKE_TIMEOUT_MS=15000

保存并退出编辑器。

第三步:重载并重启服务 应用新的配置并重启 Gateway 进程,然后重新运行相关CLI命令,例如 openclaw devices listopenclaw cron list),你会发现报错消失,连接瞬间恢复正常!

root@openclaw:~# openclaw cron list

🦞 OpenClaw 2026.3.13 (61d171a) — I've read more man pages than any human should—so you don't have to.


  
No cron jobs.

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注