OpenClaw 定时任务Cron 和 Heartbeat的區別和應用

OpenClaw 定时任务Cron 和 Heartbeat 到底该怎么选?

早上 8 点,你收到一条消息:"今日天气晴朗,气温 17°C,下午 2 点有会议,记得提前准备。"

晚上 8 点,又一条消息:"今天公众号文章已发布到草稿箱,待审核。"

没有人手动设置这些提醒,但事情准时发生了。

这就是 OpenClaw 的 Cron 和 Heartbeat 在背后工作。但很多人刚上手时容易搞混:明明想设个定时提醒,结果配置完啥也没收到;或者心跳频繁推送,把聊天窗口刷得满满当当。

今天把这两个机制拆开讲清楚,帮你少走 80% 的弯路。


一、先说结论:一张表看懂

对比项
Heartbeat(心跳)
Cron(定时任务)
角色
巡逻员
闹钟
触发逻辑
每隔 30 分钟醒来,看情况办事
到点就执行,不判断
输出规则
没事安静,有事才说
每次都推送结果
运行位置
主会话(有上下文)
可隔离(干净独立)
适合场景
监控、巡检、轻量检查
定时报告、准点提醒
配置成本
低(批量检查一次调用)
较高(每次独立调用)

选择口诀

  • 要批量巡检 → Heartbeat
  • 要准点执行 → Cron
  • 要隔离执行 + 定向推送 → Cron isolated

二、Heartbeat:AI 的"生物钟"

它是怎么工作的?

OpenClaw 的 Gateway 会按照设定的间隔(默认 30 分钟),给 AI 发一条心跳消息。AI 收到后:

  1. 读取 HEARTBEAT.md 文件中的检查清单
  2. 逐项检查(邮件、日历、任务队列等)
  3. 有异常 → 主动通知你
  4. 一切正常 → 回复 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 隔离式:怎么选?

这是初学者最容易搞混的地方。

对比项
主会话(main)
隔离式(isolated)
运行位置
你的主对话里
独立的 cron:jobId 会话
有没有上下文
有,能看到之前的聊天
没有,从零开始
适合场景
提醒、需要联系上下文的任务
独立报告、深度分析
能换模型吗
不建议(会影响主会话)
可以,用 --model 指定
输出去哪
直接在主会话里
用 --announce 投递到指定渠道

经验法则

  • 提醒类 → 主会话
  • 生产类(写文章、做分析) → 隔离式
  • 监控类 → 心跳

五、组合拳:Heartbeat + Cron

单独用哪个都行,但组合起来才是真正强大。

HEARTBEAT.md(每 30 分钟自动检查):

# 心跳检查清单
- 扫描邮箱有没有紧急邮件
- 检查日历未来 2 小时的日程
- 查看有没有未完成的任务需要推进
- 如果已经安静超过 8 小时,发个简短问候

Cron 任务(精确定时执行):

时间
任务
模式
每天 07:00
生成工作简报
隔离式 + announce
每天 13:00
自动写公众号文章
隔离式 + opus 模型
每天 20:00
小红书评论回复
隔离式
每周一 09:00
周报汇总
隔离式 + 高思维级别

分工逻辑:心跳负责"巡逻",Cron 负责"定点打击"。两者互不冲突。


六、避坑指南

坑 1:把所有任务都塞给 Heartbeat

Heartbeat 是巡检机制,不适合做太重的复杂流程。不然每次巡检都很重,成本高、也容易吵。

坑 2:Cron 设得过密

每 5 分钟一个任务,看起来很勤奋,实际上会把你搞烦。先抓关键节点,再慢慢细化。

坑 3:心跳疯狂烧 Token

未开启轻量化配置。解决方案:开启 isolatedSession、拉长执行间隔(30 分钟足够)、切换低成本模型跑心跳。

坑 4:定时任务失效

Cron/Heartbeat 均依赖 Gateway 进程运行。网关关机、服务停止,调度直接失效,需保持网关常驻。


七、省钱技巧

  1. HEARTBEAT.md 保持精简
    每次心跳都会读这个文件,内容越多消耗越大。只放真正需要定期检查的事项。

  2. 隔离式 Cron 用便宜模型
    不是每个任务都需要最强的模型。日常巡检用 Sonnet 就够了,深度分析再上 Opus。

  3. 设置活跃时段
    凌晨没人看的时候就别跑心跳了,加个 activeHours 省一半调用量。

  4. 心跳间隔不要太短
    除非你做的是实时监控,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 条评论

发表评论