我已经建立了一个 Gateway+Node 的组合,但是 Node 经常掉线,就做了一个健康检查。
- 定期检查 Gateway 和 Node 的状态
- 如果状态正常,就不处理
- 如果 Node 和 Gateway 断开,先尝试恢复建立连接
- 如果建立连接成功/失败,就主动给飞书发消息,告知结果
- 如果一切正常,就不处理 这是一个美好的设想
主要遇到如下问题:
虚假的完成状态
在 Gateway+Node 正常连接的情况下,让 OpenClaw 写了个脚本,定期在 Node 所在机器上执行。脚本运行了,也检查了 Gateway 的状态。结果当实际已经断开了,监控还在提示 Gateway 正常连接。 随后让 OpenClaw 优化了脚本。
SSH 隧道需手动输入密码
在 Tailscale 网络下,因为我的方案是 gateway 是 local 模式,只能使用 127.0.0.1 或 localhost 地址访问,必须要先建立 ssh 隧道,再执行 openclaw node xxx 命令启动 Node 节点。
建立隧道的时候还要手动输入密码,无法做到自动化。
解决方案是通过 ssh 密钥对建立信任关系,让 client 直接连上 server 端。这个过程跟通过 ssh 访问 github 是类似的。由 OpenClaw 执行生成,人工确认即可。
需在 Gateway 端补充健康检查
假设 Node 已挂的情况,其实没法和 Gateway 通信,也无法告知健康检查的结果。所以还需要加上在 Gateway 上检查,这样其实更全面。在 Node 已经断开的情况下,如果 Node 也没法恢复,只有 Gateway 主动检查才行。
飞书机器人无法主动发送消息
当 Gateway 已经识别到 Node 掉线的时候,想让它主动通过飞书发条消息给我。但是始终做不到。总结原因是:当飞书的模式是 channels.feishu.accounts.default.dmPolicy=pairing,用户必须先发消息,机器人只能回复,不能主动发起。
后台日志显示如下错误:
info [error]: [ [ { message: 'Request failed with status code 400', config: [Object], request: [Object], response: [Object] }, { code: 230002, msg: 'Bot/User can NOT be out of the chat.' error Object log_id 'xxx' troubleshooter '排查建议查看 (Troubleshooting suggestions) https


