DEBUG LOG

定时任务跑成功了,消息却没送达

Tony Agent 运维排障 5 分钟读完
定时任务信号断联示意

晚上 8 点,日报 Cron 准时触发。日志显示执行成功,内容写入 Obsidian,一切正常。

但消息没有送达。Telegram 静悄悄,飞书也空空如也。你看了一晚上日志,发现 任务确实跑完了,只是消息根本没发出去。

这不是偶发。如果你同时配置了多个消息渠道,几乎必然踩到这个坑。

问题根因

大多数 Agent 框架(OpenClaw、Hermes 等)支持多渠道消息推送。当你配置了 Telegram + 飞书 + 微信等多个渠道,Cron 任务执行完成后,框架需要一个明确的指令:往哪个渠道发?

默认行为是:不指定 = 发到主渠道。但如果你有多个渠道,框架可能:

最坑的是第三种。stdout 显示任务成功,没有任何 error,但消息根本没有离开服务器。

复现步骤

cron-config.json
// 看起来完全正常的配置
{
  "name": "daily-evening-summary",
  "schedule": "0 20 * * *",
  "model": "glm-4.5-flash",
  "prompt": "总结今天的 work log,生成日报"
  // ↑ 缺少 channel 指定
}

这份配置在单渠道环境完全正常。但当你同时有 Telegram 和飞书时,执行日志:

执行日志
[20:00:01] Cron triggered: daily-evening-summary
[20:00:03] Model response received (glm-4.5-flash)
[20:00:03] Content written to Obsidian ✓
[20:00:04] Sending to channel: default
[20:00:04] → Telegram: silently dropped (not primary)
[20:00:04] → Feishu: not specified, skipped
[20:00:05] Task completed successfully ✓
// 成功了。但消息呢?

修复方案

一行参数解决问题:

cron-config.json (fixed)
{
  "name": "daily-evening-summary",
  "schedule": "0 20 * * *",
  "model": "glm-4.5-flash",
  "prompt": "总结今天的 work log,生成日报",
  "deliver": "feishu"  // ← 加这一行
}

或者如果你的框架用命令行参数:

CLI 方式
# 显式指定渠道
cron run daily-summary --channel feishu

# 多渠道同时发
cron run daily-summary --channel feishu,telegram

排障清单

如果你的 Cron 任务也出现「成功但没消息」,按这个顺序排查:

检查项 怎么看 正常状态
渠道指定 查配置文件有没有 channel 或 deliver 显式指定,不依赖默认
执行日志 grep "Sending\|delivered\|dropped" cron.log 看到明确的渠道名和 sent 状态
Memory 日志 检查日报内容是否写入了 memory/ 目录 有当天日期的 .md 文件
API 限流 检查目标渠道 API 有没有 429 错误 无 rate limit 报错
关键原则
多渠道环境下,永远显式指定消息目标。不要依赖框架的默认行为——"默认渠道"在不同版本、不同配置下可能完全不同。

花一分钟加上 --channel feishu,省一晚上查日志。

扩展:省钱策略

顺带说一下 Cron 的成本优化。不是所有定时任务都需要最强模型:

任务类型 推荐模型 理由
日报/摘要 glm-4.5-flash 模板化输出,轻量够用
笔记整理 glm-5.1 需要语义理解,保证质量
推文摘要 glm-4.5-flash 信息提取为主,不需要推理
周研究综述 glm-4.5-flash 量大人少,省 token

原则:简单 cron 用 flash,复杂任务才上 pro。6 个定时任务跑一个月,成本差 5-8 倍。


REFERENCES
[1] 实际排障记录:2026-03-28,日报 Cron 执行成功但飞书未送达
[2] 根因:多渠道(Telegram + 飞书)未指定 channel 参数
[3] 修复:为两个 cron 任务都添加 --channel feishu