OpenClaw定时任务实战:Heartbeat vs Cron选型指南与避坑手册
当你用OpenClaw完成了第一个自动化任务,兴奋感还没消退,新的问题就来了:"怎么让它每天自动跑?"
这不是你一个人的困惑。从3月初我们开始用OpenClaw运营公众号,到现在每天早上6:52自动推送"晨间AI咖啡"、每天0:14自动整理协作档案,中间踩过不少坑。这篇文章把我们在实战中总结的Heartbeat和Cron选型经验分享给你。
━━━━━━━━━━━━━━
一、背景与问题:为什么传统自动化工具不够用
1.1 传统定时任务的三大痛点
如果你用过Linux的Crontab或Windows的计划任务,一定有这种体验:
痛点一:只管触发,不管上下文Cron到点就执行脚本,但脚本不知道"今天发生了什么"。比如你想让AI每天根据昨天的运营数据生成简报,传统Cron只能触发脚本,数据分析、内容生成、格式排版全得你自己写代码。
痛点二:黑盒运行,难以调试任务失败了?看日志吧。日志看不懂?慢慢排查。传统定时任务就像一个黑盒,跑通了还好,出问题就头疼。
痛点三:多任务管理混乱有5个定时任务,就得写5个脚本、配5条Cron表达式、管理5份日志。任务之间有依赖关系?自己写状态机吧。
1.2 OpenClaw的解法:把AI变成"有时间观念的助手"
OpenClaw给AI加上了"时间感知"能力,不只是"到点触发",而是:
理解任务上下文(知道"今天"和"昨天"的区别) 自主决策(判断"有没有重要事项需要汇报") 自然交互(用对话的方式告诉你结果,而不是丢一份日志)
实现这个能力的核心机制,就是Heartbeat和Cron。
━━━━━━━━━━━━━━
二、案例/方案详解:Heartbeat与Cron的核心区别
2.1 一句话记住两者的区别
| Heartbeat | ||
| Cron |
关键差异:
Heartbeat关注的是"有没有事",没事就静默; Cron关注的是"到点了",到点必须执行。
2.2 Heartbeat详解:适合"批量巡检+智能判断"
工作原理:Heartbeat在主会话中以固定间隔运行(默认30分钟),每次运行时会:
读取工作区的 HEARTBEAT.md文件(如果存在)执行模型推理,判断是否有关键事项 如果响应包含 HEARTBEAT_OK,则静默不打扰;否则发送通知
典型适用场景:
每30分钟检查一次邮箱+日历+通知,批量处理 判断"未来2小时内是否有会议",有则提醒 监控项目状态,只在异常时报警
我们的实战案例:公众号运营巡检
我们的HEARTBEAT.md配置:
# 心跳检查清单- 检查今天晨间AI咖啡是否已发布- 查看是否有高优先级用户消息- 如果8小时以上未交互,发送轻量问候每天早上,Heartbeat会自动检查"今天的文章发了没"。如果没发(比如6:52的Cron任务失败了),它会提醒我们手动补发;如果已发布,就静默返回HEARTBEAT_OK。
Heartbeat的三大优势:
上下文感知:Agent拥有完整的主会话上下文,能智能判断优先级 批量处理:一次心跳可以检查邮件、日历、通知、项目状态,替代多个Cron任务 成本优化:单次运行只消耗一次Agent轮次,比多个独立Cron任务更便宜
2.3 Cron详解:适合"精确调度+独立任务"
工作原理:Cron在Gateway网关内部运行(而非模型内部),支持三种调度类型:
类型一:at — 一次性定时
{"schedule": { "kind": "at", "at": "2026-03-17T16:00:00+08:00" }}适合:20分钟后提醒我、今天下午3点开会
类型二:every — 固定间隔循环
{"schedule": { "kind": "every", "everyMs": 3600000// 1小时 = 3600000毫秒 }}常用换算:5分钟=300000、30分钟=1800000、1小时=3600000
类型三:cron — Cron表达式(最灵活)
{"schedule": { "kind": "cron", "expr": "0 9 * * *", // 每天早上9点"tz": "Asia/Shanghai"// 必须设置时区! }}⚠️ 最常见的坑:忘记设置tz字段如果不设时区,默认使用UTC。你配置的"早上9点"会变成北京时间下午5点。
典型适用场景:
每天早上7:00准时发送日报 每周一早上9:00生成周报 每隔4小时检查一次竞品网站
我们的实战案例:晨间AI咖啡定时发布
我们的Cron任务配置(简化版):
{"name": "晨间AI咖啡","schedule": {"kind": "cron","expr": "52 6 * * *", // 每天早上6:52(避开整点)"tz": "Asia/Shanghai" },"sessionTarget": "isolated","payload": {"kind": "agentTurn","message": "执行晨间AI咖啡发布任务...","thinking": "high" }}选择sessionTarget: isolated的原因:
晨间AI咖啡是独立任务,不需要主会话上下文 隔离会话可以用不同的模型配置(比如用更强的模型处理复杂任务) 不会污染主会话的历史记录
Cron的三大优势:
精确定时:支持分钟级精度的Cron表达式 会话隔离:独立运行,不影响主会话 模型覆盖:可按任务指定不同模型(简单任务用便宜模型,复杂任务用强模型)
2.4 Heartbeat vs Cron 选型决策表
| Heartbeat | ||
| Cron (isolated) | ||
| Heartbeat | ||
| Cron (isolated) | ||
| Cron (main, at) | ||
| Heartbeat |
━━━━━━━━━━━━━━
三、效果与数据:我们的实战效果
3.1 晨间AI咖啡:从手动到全自动
执行数据(2026-03-05至今):
总执行次数:13次 成功率:76.9%(10次成功,3次失败) 失败原因:2次API限流(7:00早高峰)、1次配图脚本错误 平均执行时长:5-8分钟 Token消耗:约6-8万tokens/次
容错机制:我们设置了3层保障:
主任务:6:52执行 重试备份:7:52检查,如未生成则补发 最终重试:8:52检查,如仍未生成则人工介入
这种多层保障机制确保了即使单点故障,也不会漏发文章。
3.2 协作档案整理:Heartbeat批量检查+Cron定时触发
执行数据:
执行频率:每天0:14 执行时长:约3-5分钟 Token消耗:约3-4万tokens/次
效率提升:
过去人工整理:每天约30分钟 现在自动化:每天0分钟(完全自动) 累计节省时间:3月5日至今约10小时
3.3 成本对比:Heartbeat vs Cron (isolated)
关键洞察: Heartbeat的批量处理能力,可以显著降低多任务场景下的总体成本。
━━━━━━━━━━━━━━
四、可复制经验:5分钟搭建你的第一个定时任务
4.1 第一步:明确你的需求
在配置之前,先回答三个问题:
需要精确时间吗? → 是:用Cron;否:考虑Heartbeat 需要主会话上下文吗? → 是:用Heartbeat或Cron(main);否:用Cron(isolated) 是单一任务还是批量检查? → 单一:用Cron;批量:用Heartbeat
4.2 第二步:配置Heartbeat(适合批量检查)
Step 1:创建HEARTBEAT.md文件
路径:~/.openclaw/workspace/HEARTBEAT.md
内容示例:
# 心跳检查清单## 每30分钟检查- 检查邮箱是否有紧急邮件(来自VIP联系人)- 查看未来2小时是否有日历事件- 检查待处理任务列表## 每日检查(8:00-22:00之间)- 如果超过8小时未交互,发送轻量问候- 检查项目关键指标是否正常Step 2:配置心跳参数(可选)
在openclaw.json中:
{"agents": {"defaults": {"heartbeat": {"intervalMinutes": 30,"activeHours": {"start": "08:00","end": "23:00" },"lightContext": true } } }}4.3 第三步:配置Cron(适合精确调度)
方式一:通过对话创建(推荐新手)
直接告诉你的Agent:
"创建一个cron任务,每天早上7点生成今日简报,检查邮件、日历和AI新闻,然后发送给我。"
Agent会自动解析意图,选择合适的调度类型,创建任务并确认。
方式二:通过CLI创建(适合精确控制)
# 每日晨报openclaw cron add \ --name "Morning brief" \ --cron "0 7 * * *" \ --tz "Asia/Shanghai" \ --session isolated \ --message "生成今日简报:检查邮件、日历、AI新闻" \ --announce# 一次性提醒(30分钟后)openclaw cron add \ --name "Reminder" \ --at "30m" \ --session main \ --system-event "提醒:会议即将开始" \ --wake now \ --delete-after-run# 每周深度分析(使用更强的模型)openclaw cron add \ --name "Weekly analysis" \ --cron "0 9 * * 1" \ --session isolated \ --message "生成本周深度分析报告" \ --model opus \ --thinking high \ --announce4.4 第四步:测试与验证
测试Cron任务:
# 立即手动运行(不等待调度时间)openclaw cron run <job-id># 查看执行历史openclaw cron runs --id <job-id>测试Heartbeat:直接发送HEARTBEAT_OK测试消息,观察Agent是否按预期响应。
4.5 第五步:避坑指南
"tz": "Asia/Shanghai" | ||
session: isolated | ||
openclaw cron list检查 |
━━━━━━━━━━━━━━
五、总结与展望:从"反应式"到"主动式"的AI自动化
5.1 核心心法
Heartbeat = 巡逻员:周期性感知,智能判断,按需提醒Cron = 闹钟:精确调度,准时执行,雷打不动
最高效的配置是两者结合:
Heartbeat处理常规监控(批量检查、上下文感知) Cron处理精确调度(定时报告、一次性提醒)
5.2 我们的演进路径
阶段一:反应式(3月初)
每天早上手动问Agent:"今天有什么AI新闻?" 每天晚上手动问:"今天完成了哪些任务?"
阶段二:半自动(3月中旬)
用Cron设置早上7点自动推送晨报 但内容质量不稳定,有时需要手动调整
阶段三:主动式(现在)
Heartbeat每30分钟巡检,确保任务正常执行 Cron精确调度晨间AI咖啡、协作档案整理等固定任务 多层容错机制,单点故障不影响整体
5.3 趋势预判
随着OpenClaw等AI Agent框架的普及,"AI自动化"正在从"定时触发脚本"进化为"有时间观念的AI助手"。
2026年趋势:
**从"人到AI"到"AI到人"**:不再是人主动问AI,而是AI主动在合适的时间推送合适的信息 **从"单一任务"到"工作流编排"**:多个定时任务协同,形成完整的自动化工作流 **从"固定时间"到"智能时机"**:AI不仅按时间表执行,还能根据上下文判断"现在是不是提醒的好时机"
给读者的建议:如果你刚开始用OpenClaw,建议从简单的Cron任务入手(比如"每天早上生成简报"),逐步加入Heartbeat进行批量检查。当两者配合顺畅后,你会发现:AI不再是一个"等你提问的工具",而是一个"主动帮你推进事情的助手"。
━━━━━━━━━━━━━━
数据来源清单
━━━━━━━━━━━━━━
💬 聊聊你的想法
你现在的自动化需求,更适合用Heartbeat还是Cron?如果有机会让AI帮你自动处理一项日常任务,你会选择什么?欢迎在评论区分享你的想法 👇
附:Cron表达式速查表
* * * * *│ │ │ │ ││ │ │ │ └─ 星期 (0-7, 0和7都是周日)│ │ │ └─── 月份 (1-12)│ │ └───── 日期 (1-31)│ └─────── 小时 (0-23)└───────── 分钟 (0-59)常用示例:0 9 * * * 每天早上9点0 9 * * 1 每周一早上9点0 9,18 * * * 每天9点和18点*/30 * * * * 每30分钟0 0 1 * * 每月1号零点附:OpenClaw Cron常用命令
# 列出所有任务openclaw cron list# 立即运行某个任务(测试用)openclaw cron run <job-id># 查看任务执行历史openclaw cron runs --id <job-id># 启用/禁用任务openclaw cron enable <job-id>openclaw cron disable <job-id># 删除任务openclaw cron rm <job-id>
夜雨聆风