OpenClaw 定时任务Cron 和 Heartbeat 到底该怎么选?
早上 8 点,你收到一条消息:"今日天气晴朗,气温 17°C,下午 2 点有会议,记得提前准备。"
晚上 8 点,又一条消息:"今天公众号文章已发布到草稿箱,待审核。"
没有人手动设置这些提醒,但事情准时发生了。
这就是 OpenClaw 的 Cron 和 Heartbeat 在背后工作。但很多人刚上手时容易搞混:明明想设个定时提醒,结果配置完啥也没收到;或者心跳频繁推送,把聊天窗口刷得满满当当。
今天把这两个机制拆开讲清楚,帮你少走 80% 的弯路。
一、先说结论:一张表看懂
|
|
|
|
|---|---|---|
| 角色 |
|
|
| 触发逻辑 |
|
|
| 输出规则 |
|
|
| 运行位置 |
|
|
| 适合场景 |
|
|
| 配置成本 |
|
|
选择口诀:
-
要批量巡检 → Heartbeat -
要准点执行 → Cron -
要隔离执行 + 定向推送 → Cron isolated
二、Heartbeat:AI 的"生物钟"
它是怎么工作的?
OpenClaw 的 Gateway 会按照设定的间隔(默认 30 分钟),给 AI 发一条心跳消息。AI 收到后:
-
读取 HEARTBEAT.md文件中的检查清单 -
逐项检查(邮件、日历、任务队列等) -
有异常 → 主动通知你 -
一切正常 → 回复 HEARTBEAT_OK(系统自动静默,不打扰)
配置步骤
第一步:编辑 openclaw.json
{
"agents": {
"defaults": {
"heartbeat": {
"every": "30m",
"target": "last",
"activeHours": {
"start": "08:00",
"end": "22:00",
"timezone": "Asia/Shanghai"
}
}
}
}
}
第二步:创建 HEARTBEAT.md
# HEARTBEAT.md
## 每次心跳检查
- 检查未读邮件,超过 3 封列出前 3 封标题
- 查看未来 2 小时内的日程,有会议提前提醒
- 如果超过 8 小时没联系,发个简短问候
## 周五下午额外检查
- 提醒写周报
关键原则:文件越精简越好,内容越长,每次心跳消耗的 Token 越多。
三、Cron:AI 的"准点闹钟"
什么时候该用 Cron?
简单判断标准:
-
要求准时 → Cron("每天早上 9 点整发日报") -
一次性提醒 → Cron("20 分钟后提醒我开会") -
需要独立执行、不污染主会话 → Cron isolated -
需要换模型执行 → Cron(可单独指定)
实战示例
示例 1:每天早上 7 点推送工作简报
openclaw cron add \
--name "Morning briefing" \
--cron "0 7 * * *" \
--tz "Asia/Shanghai" \
--session isolated \
--message "生成今天的工作简报:天气、日历日程、重要邮件摘要。" \
--announce \
--channel telegram \
--to "你的聊天 ID"
示例 2:20 分钟后提醒开会(一次性)
openclaw cron add \
--name "Meeting reminder" \
--at "20m" \
--session main \
--system-event "提醒:20 分钟后有站会" \
--wake now \
--delete-after-run
示例 3:每天中午自动写公众号文章
openclaw cron add \
--name "每日公众号文章生成" \
--cron "0 13 * * *" \
--tz "Asia/Shanghai" \
--session isolated \
--message "读取内容规划,找到后天日期对应的选题,搜索资料撰写文章并发布到草稿箱。" \
--model "opus" \
--thinking low \
--announce \
--channel webchat
四、主会话 vs 隔离式:怎么选?
这是初学者最容易搞混的地方。
|
|
|
|
|---|---|---|
| 运行位置 |
|
|
| 有没有上下文 |
|
|
| 适合场景 |
|
|
| 能换模型吗 |
|
|
| 输出去哪 |
|
|
经验法则:
-
提醒类 → 主会话 -
生产类(写文章、做分析) → 隔离式 -
监控类 → 心跳
五、组合拳:Heartbeat + Cron
单独用哪个都行,但组合起来才是真正强大。
HEARTBEAT.md(每 30 分钟自动检查):
# 心跳检查清单
- 扫描邮箱有没有紧急邮件
- 检查日历未来 2 小时的日程
- 查看有没有未完成的任务需要推进
- 如果已经安静超过 8 小时,发个简短问候
Cron 任务(精确定时执行):
|
|
|
|
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
分工逻辑:心跳负责"巡逻",Cron 负责"定点打击"。两者互不冲突。
六、避坑指南
坑 1:把所有任务都塞给 Heartbeat
Heartbeat 是巡检机制,不适合做太重的复杂流程。不然每次巡检都很重,成本高、也容易吵。
坑 2:Cron 设得过密
每 5 分钟一个任务,看起来很勤奋,实际上会把你搞烦。先抓关键节点,再慢慢细化。
坑 3:心跳疯狂烧 Token
未开启轻量化配置。解决方案:开启 isolatedSession、拉长执行间隔(30 分钟足够)、切换低成本模型跑心跳。
坑 4:定时任务失效
Cron/Heartbeat 均依赖 Gateway 进程运行。网关关机、服务停止,调度直接失效,需保持网关常驻。
七、省钱技巧
-
HEARTBEAT.md 保持精简
每次心跳都会读这个文件,内容越多消耗越大。只放真正需要定期检查的事项。 -
隔离式 Cron 用便宜模型
不是每个任务都需要最强的模型。日常巡检用 Sonnet 就够了,深度分析再上 Opus。 -
设置活跃时段
凌晨没人看的时候就别跑心跳了,加个activeHours省一半调用量。 -
心跳间隔不要太短
除非你做的是实时监控,30 分钟一次完全够用。设成 5 分钟一次,除了烧钱没别的效果。
八、调试命令
# 查看所有 Cron 任务
openclaw cron list
# 手动触发某个任务
openclaw cron run <jobId> --force
# 查看运行历史
openclaw cron runs --id <jobId> --limit 10
# 手动唤醒心跳(测试用)
openclaw system event --text "检查是否有紧急待办" --mode now
4 条评论