如果你在使用 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 list 或 openclaw 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.