2026 OpenClaw「不回复」与静默失败排查:heartbeat、thinking 与 Cron 通道对照清单
你已经能打开 Dashboard、端口 18789 也放行,但用户侧看到长时间「无回复」,或 Cron/定时任务跑完却没有任何投递,或网关日志里像成功、IM 里却空无一物——这三类在 2026 年社区反馈里常被混为一谈。本文按现象分层先把「模型侧 thinking/heartbeat 空输出」「工作流幻觉文件」「通道/Webhook」与「安装/升级/端口」拆开;给出对照表、不少于 5 步的最短诊断顺序(doctor / models status / logs),并说明何时不必重装;与 常见报错清单、sessions_spawn 排错、Webhook 通道 交叉阅读可覆盖绝大多数「静默」类工单。
本文要点
1. 三类痛点:为什么「不回复」不等于「网关挂了」
OpenClaw 的请求路径长:通道入站 → 网关调度 → 模型推理 → 工具/工作流 → 再经通道出站。任一环节无异常栈但无可见输出,用户都会概括为「不回复」。这与 安装阶段报错 不同:后者有明确 exit code 或 TLS/依赖错误;静默类问题更需要分层取证。下文默认你已能访问网关管理面;若 18789 仍不可达,请先回到 首次上线与防火墙 章节。
- 模型侧「thinking」与 heartbeat 任务:部分模型在开启 thinking 模式时,Cron 或短任务可能长时间处于「内部推理」状态,最终可交付正文为空,通道层便无任何消息可发。社区实践中常见 workaround 是在 heartbeat/定时代理路径上关闭 thinking 或缩短思考预算,使任务在数十秒内产出可投递片段。若你仅在交互聊天里正常、而定时任务永远「无声」,应优先怀疑这一条,而非立刻重装 npm 包。
- 工作流与虚构文件路径:多轮对话里模型可能反复引用并不存在的
WORKFLOW_AUTO.md等路径;若你的自动化真去读取这些文件,会表现为「任务结束但无输出」或「日志里像跑了脚本实则 no-op」。处理方式是:用仓库内真实文件固定工作流入口,并在提示词层禁止模型自创路径;同时对照 沙箱与工作目录,确认相对路径与运行用户一致。 - 通道投递与速率限制:网关侧显示 handled,但 Telegram/Slack/企业 IM 因 429、Webhook 失效 URL、或 Bot 被禁言而无展示。此类问题与模型无关,却最容易被误判为「OpenClaw 坏了」。应对照 Webhook 与常驻进程 文中的 curl 自检与 launchd 环境变量。
把上述三类映射到你的现象:交互正常与否、是否仅 Cron、是否仅某一通道——再进入下一节表格,可避免同时修改模型密钥、重装依赖和改防火墙十条规则。
另有一类「假静默」来自客户端展示层:例如移动 IM 对长消息折叠、或 Web 控制台缓存旧会话,而网关实际已返回。处理办法是在日志中搜索该请求的 correlation id / trace id,与通道 API 的 HTTP 状态码对齐;若日志显示 200 而客户端仍空白,应转向客户端版本与 CDN 缓存,而不是调整模型温度。再一类与并发与队列相关:多 worker 或多次重复注册同一 Webhook 时,后入队任务可能被去重策略丢弃,表象也是「没回」;需在网关配置里显式打开队列深度与丢弃原因的 debug 级别日志(具体开关以版本为准),并与 网关 Token 与限流 文档核对。
2. 现象分流表:全静默、仅 Cron、仅通道
| 现象 | 优先怀疑层 | 首选验证 | 通常可先排除 |
|---|---|---|---|
| 交互与 Cron 都不回复,doctor 有黄项 | 提供商密钥/模型路由 | openclaw models status、试最小单轮对话 | 端口 18789(若 HTTP 健康检查仍通) |
| 仅 Cron/heartbeat 无声,手动聊天正常 | thinking/heartbeat 配置、任务超时 | 对 Cron 用户关闭 thinking 或限思考步数;看日志时长分布 | 整包重装 |
| 网关日志成功,IM 无消息 | 通道 Token、Webhook、限流 | 对 Webhook URL 做 curl、核对 Bot 权限 | 模型 temperature 一类参数 |
| 偶发「跑完但空输出」 | 工作目录、沙箱、虚构路径 | 固定 cwd、最小可复现脚本 | 「随机不稳定」(多为环境漂移) |
| 升级后出现 | 配置键迁移、默认行为变更 | 对照 升级说明 与 OPENCLAW_* diff | 硬件故障 |
若你同时启用 生产加固 的沙箱与出站限制,记得把「通道出站」「模型 API 出站」同时列入允许列表,否则会出现「部分任务静默失败」的假象。
排障时建议随手打开对照表的一行作为工单标题前缀(例如「仅 Cron + thinking 可疑」),这样与同事的交接成本最低;若后续证明是通道 429,再把前缀改为「通道限流」即可闭环。对于已接入多个 IM 的环境,务必标注哪一条通道复现,避免把 Telegram 的配置改动误记到 Slack 工单上。
3. 落地步骤:5 步最短诊断路径
下列顺序刻意先软件分层、后重装,适合在 Mac 云 7×24 节点上由值班按 Runbook 执行。
- 基线健康:运行
openclaw doctor与openclaw health --json(若版本提供),保存输出;确认 Node 大版本与官方要求一致,与 极速部署 文档对齐。 - 模型与凭证:
openclaw models status或等价命令,验证各 provider 401/429 是否干净;对静默任务单独指定已知可用的模型做 A/B。 - 日志与时间线:
openclaw logs --follow(或你部署的 journal 路径),从「入站事件 ID」追到「出站发送」;若日志在推理后戛然而止,回到 thinking/heartbeat 配置。 - 通道探针:用最小 echo 任务经同一通道发一条消息;失败则查 Webhook/Token/env 是否与 launchd plist 一致(非交互 shell 未继承
.zshrc是高频根因)。 - 配置最小化对比:复制一份 staging 配置,仅保留单通道+单模型+关闭工具,验证是否仍静默;若 staging 正常而生产静默,逐步合并差异而非整体重装。
launchctl 托管网关,任何仅在 ~/.zshrc 里 export 的 API Key 都不会进入守护进程环境;表现为「SSH 手动启动正常、重启后全静默」。
完成前五步仍无解时,再考虑版本回滚或隔离目录重装,并保留旧配置与日志 tarball 以便与上游 issue 对齐。盲目 npm install -g --force 往往会抹掉你已调好的 heartbeat 片段,延长故障时间。
建议在 Runbook 中为「静默」类工单增加时间盒:例如前 15 分钟只执行分层表中的「通道探针 + models status」,禁止同时改动三处以上配置;这样排障记录可读,也方便事后复盘是模型策略还是运维环境导致。对多地域团队,可在 Mac 云节点上保留只读 dashboard 截图或 JSON 导出,与本地笔记本现象对照,快速判断是否为「仅云上 launchd 环境缺失变量」这一固定模式。
4. 可引用配置点与参数
① heartbeat / 定时代理:为短周期任务关闭 thinking 或限制推理步数,可显著降低「空输出」概率(具体键名以你安装的 OpenClaw 版本文档为准,升级后务必 diff)。② 超时:通道客户端与上游模型超时需匹配;过短会截断长任务,过长会让用户以为「死机」。③ 重试:对 429/5xx 的退避策略应记录到日志,否则界面层仍静默。④ Mac 云磁盘与日志轮转:日志写满会导致进程异常退出,表象也像「不回复」;结合 会话与权限 检查写权限。⑤ 合规:生产环境避免在日志里打印完整密钥;排障时使用临时 read-only token。⑥ 时钟同步:NTP 漂移会导致 JWT 或签名型 Webhook 间歇失败,日志里偶发 401;在 Mac 云上对 sntp 或系统时间做一次基线检查往往比换模型更快定位。⑦ 字符集与消息长度:个别通道对 Unicode 或附件大小有限制,模型输出非空却在投递层被截断为空,应在通道侧打开原始 payload 日志对比。
5. 从反复重装到可复现的 Mac 云 Agent 底座
每次「不回复」都重装全局包,会把环境变量、launchd 单元、沙箱策略的真实根因掩盖掉,尤其在笔记本与 Mac 云混用密钥时,极易演变成「本地永远正常、云上永远静默」的不可复现故事。
更稳妥的是固定分层诊断表与五步 Runbook,把 thinking/heartbeat、通道、工作目录三类检查拆票;需要长期 7×24 承载多通道与自动化时,租赁 VPSMAC 的 M4 Mac 云主机 并在交付时附带「静默类问题」专项自检,通常比在异构虚拟机或临时容器里反复重装更省时:日志路径统一、进程用户清晰、与 Apple 工具链同机,减少一层「到底哪条环境没继承」的猜测。
6. 常见问题
手动聊天正常,只有 Cron 静默,最先改什么?
优先查 Cron/heartbeat 路径上的 thinking 配置与运行用户环境;再查超时与空输出是否被通道丢弃。
日志里没有报错算不算「成功」?
不算。必须看到出站或通道 ACK;否则继续追模型输出长度与通道层。
何时应该重装?
当 doctor 显示安装损坏、二进制与 Node ABI 不匹配、或官方升级脚本要求净目录安装时;单纯静默优先分层排查。
与「常见报错清单」如何分工阅读?
安装失败、端口占用、TLS 握手错误等请看 常见报错清单;本文聚焦无栈或弱提示的静默。二者叠加可覆盖从「装不上」到「装得上但不说话」的全链路。