OpenClaw 提供了两种机制来处理定时任务:**Heartbeat(主会话轮询)**和 Cron(计划任务)。它们都能让 AI 助手"自动做事",但设计意图和使用场景截然不同。
选错机制的后果很真实:要么消息轰炸、Token 燃烧,要么该提醒的时候没动静。这篇文章帮你理清边界,做出正确选择。
一、问题本质:你在解决什么问题?
先问自己三个问题:
1. 时间精度要求高吗? "每天早上9点整" vs "每隔一段时间检查一下" 2. 需要主会话的上下文记忆吗? 助手需要知道你们刚才聊了什么吗? 3. 这是独立的任务还是批量检查的一部分? 单独运行,还是和其他检查一起跑?
这三个问题的答案,直接决定你该用 Heartbeat 还是 Cron。
二、Heartbeat:周期性感知
Heartbeat 是 OpenClaw 在主会话中定期执行的检查(默认每30分钟一次)。它让助手保持"警觉",查看是否有值得关注的事情。
核心特点
HEARTBEAT_OK | |
适合场景
• 多任务批量检查:一次心跳同时检查邮箱、日历、待办、天气 • 上下文感知决策:助手知道你们最近在聊什么,能判断事情的紧急程度 • 自然对话延续:能基于之前的对话跟进 • 轻量级监控:不需要精确到分钟的定时任务
典型配置
{ agents: { defaults: { heartbeat: { every: "30m", target: "last", activeHours: { start: "08:00", end: "22:00" } } } }}HEARTBEAT.md 示例
在工作目录创建 HEARTBEAT.md,作为助手的检查清单:
# Heartbeat 检查清单- 检查邮箱是否有紧急邮件- 查看日历接下来2小时内是否有事件- 如果有后台任务完成,总结结果- 如果超过8小时没互动,发一个简短的问候Heartbeat 运行时,助手会读取这个文件并执行其中的检查项。
三、Cron:精确调度
Cron 是 OpenClaw 的内置计划任务系统,可以在精确的时间点执行任务,支持两种运行模式:主会话(system event)或独立会话(isolated)。
核心特点
适合场景
• 精确时间点:"每周一上午9点发送周报" • 一次性提醒:"20分钟后提醒我开会" • 独立重任务:需要高性能模型(如 Opus)的复杂分析 • 不污染主会话:频繁或嘈杂的后台任务 • 直接投递:结果直接发到指定频道,不经过主会话
常用命令示例
一次性提醒(主会话)
openclaw cron add \ --name "会议提醒" \ --at "20m" \ --session main \ --system-event "10分钟后开始站会" \ --wake now \ --delete-after-run每天早上7点推送简报(独立会话)
openclaw cron add \ --name "早间简报" \ --cron "0 7 * * *" \ --tz "Asia/Shanghai" \ --session isolated \ --message "总结今天的天气、日程和待办事项" \ --announce \ --channel whatsapp \ --to "+86138xxxxxxxx"每周深度分析(使用更强的模型)
openclaw cron add \ --name "周度代码分析" \ --cron "0 6 * * 1" \ --session isolated \ --message "分析本周代码提交,生成质量报告" \ --model opus \ --thinking high \ --announce四、对比决策表
| Heartbeat | ||
| Cron (isolated) | ||
| Cron (main, --at) | ||
| Cron (isolated) | ||
| Heartbeat | ||
| Cron (isolated) |
五、常见误区
误区1:Heartbeat 可以替代 Cron 做精确提醒
错误:把 Heartbeat 间隔调到5分钟,想实现"准点提醒"。
后果:
• Token 消耗爆炸(每5分钟一次完整 Agent Turn) • 仍然不精确(Heartbeat 会受队列负载影响漂移) • 消息轰炸
正确做法:需要精确时间用 Cron,Heartbeat 保持30分钟以上间隔。
误区2:Cron 任务都走主会话
错误:所有 Cron 任务都用 --session main,导致主会话历史膨胀。
后果:
• 主会话上下文越来越长,成本上升 • 频繁的后台任务干扰正常对话 • 历史记录杂乱
正确做法:独立任务走 --session isolated,结果通过 --announce 投递。
误区3:Heartbeat 清单写得过于复杂
错误:HEARTBEAT.md 写得像一份完整的工作手册。
后果:
• 每次心跳 Token 消耗过大 • 检查项太多,容易漏掉重点
正确做法:保持清单精简,只放真正需要周期性检查的事项。其他任务拆分到 Cron。
六、最佳实践组合
最高效的设置是两者配合:
1. Heartbeat 负责日常感知
# HEARTBEAT.md- 检查邮箱紧急邮件- 查看接下来2小时的日历事件- 检查是否有已完成的背景任务需要汇报- 如果安静超过8小时,发送轻量问候2. Cron 负责精确任务
# 每天早上7点简报openclaw cron add --name "晨间简报" --cron "0 7 * * *" --session isolated --message "..." --announce# 每周一上午9点周报openclaw cron add --name "周一周报" --cron "0 9 * * 1" --session isolated --message "..." --model opus# 需要时的一次性提醒openclaw cron add --name "临时提醒" --at "2h" --session main --system-event "..." --wake now七、决策流程图
需要精确到具体时间点? ├── 是 → 用 Cron │ └── 否 → 需要主会话上下文? ├── 是 → 可以用 Cron (main) 或 Heartbeat │ └── 否 → 能和其他检查一起批量跑? ├── 是 → 用 Heartbeat(加入 HEARTBEAT.md) └── 否 → 用 Cron (isolated)八、总结
| 定位 | ||
| 精度 | ||
| 上下文 | ||
| 成本 | ||
| 最佳场景 |
一句话原则:
• 需要精确时间或独立运行 → 用 Cron • 需要批量检查或上下文感知 → 用 Heartbeat
两者不是互斥的,而是互补的。合理搭配,才能既保证及时性,又控制成本和噪音。
参考文档
• OpenClaw Cron vs Heartbeat • Cron Jobs 详细文档 • Heartbeat 配置指南
夜雨聆风