Skip to content
广告 · 本站推荐广告

Cron vs 心跳 - 调度策略对比

OpenClaw 提供两种不同的调度机制:Cron(定时任务调度器)和 Heartbeat(心跳脉冲)。理解它们的区别和适用场景,是设计可靠自动化工作流的关键。

核心区别

Cron - 精确定时调度

Cron 由 Gateway(网关)管理,在精确的时间点触发 Agent(智能体)执行任务。

  • 触发方式:精确时间点或固定间隔
  • 管理者:Gateway 进程
  • 精度:秒级(6 字段表达式)或分钟级(5 字段表达式)
  • 持久化:任务配置持久化存储在 ~/.openclaw/cron/
  • 独立性:不依赖 Agent 是否在线

Heartbeat - 周期性脉冲

Heartbeat 是 Agent 运行时的周期性脉冲信号,Agent 在每次心跳时检查是否有待处理的事件。

  • 触发方式:周期性脉冲,间隔由 Agent 配置决定
  • 管理者:Agent 进程自身
  • 精度:取决于心跳间隔(通常 5s - 60s)
  • 持久化:脉冲本身不持久化,事件队列持久化
  • 依赖性:需要 Agent 进程在线运行

对比详表

特性CronHeartbeat
调度精度高(精确到秒/分)低(取决于心跳间隔)
触发时间精确指定时间下一次心跳时处理
离线行为Gateway 记录,Agent 上线后补执行Agent 离线期间不触发
管理方式CLI / 配置文件Agent 内部逻辑
适合场景定时报告、周期同步事件响应、状态检查
资源消耗低(仅触发时消耗)持续消耗(每次心跳)
任务类型独立任务队列中的待处理事件
重试机制内置指数退避依赖事件队列重投
最大任务数无限制N/A(事件驱动)
时区支持支持 IANA 时区跟随系统时区

工作流程对比

Cron 工作流

时间到达 → Gateway 触发 → 创建 Agent Turn → 执行任务 → 记录结果

                    可选:主会话 / 隔离会话

Heartbeat 工作流

心跳脉冲 → Agent 检查事件队列 → 有事件? → 处理事件 → 下一次心跳

                               无事件 → 跳过

选择指南

使用 Cron 的场景

推荐使用 Cron

  • ✅ 每天固定时间生成日报/周报
  • ✅ 每小时同步外部数据
  • ✅ 每周一自动发送会议提醒
  • ✅ 月底自动生成月度报表
  • ✅ 需要精确到分钟或秒的调度
  • ✅ Agent 可能不在线,但任务不能遗漏
bash
# 示例:每天早上 7 点生成晨报
openclaw cron add \
  --name "morning-report" \
  --cron "0 7 * * *" \
  --timezone "Asia/Shanghai" \
  --session isolated \
  --message "生成今日晨报"

使用 Heartbeat 的场景

推荐使用 Heartbeat

  • ✅ 响应 Webhook 推送的事件
  • ✅ 处理 Polls 检测到的数据变更
  • ✅ 执行用户交互式命令
  • ✅ 低优先级的后台状态检查
  • ✅ Agent 始终在线的实时响应场景
json
{
  "agent": {
    "heartbeat": {
      "interval": 15000,
      "onBeat": "check-pending-events"
    }
  }
}

组合使用

在复杂工作流中,Cron 和 Heartbeat 可以协同工作:

Cron (每小时)           Heartbeat (每15秒)
    │                       │
    ▼                       ▼
 生成同步指令  ──入队──>  Agent 处理队列事件


                       执行数据同步


                       结果通知/存储

组合示例:定时数据同步 + 实时通知

json
{
  "cron": {
    "entries": {
      "data-sync-trigger": {
        "cron": "0 */2 * * *",
        "session": "main",
        "message": "启动数据同步流程"
      }
    }
  },
  "agent": {
    "heartbeat": {
      "interval": 10000,
      "onBeat": "process-sync-queue"
    }
  }
}

协同工作模式

  1. Cron 每 2 小时触发一次,将 "数据同步" 事件入队
  2. Heartbeat 每 10 秒检查队列,发现事件后执行实际的同步操作
  3. 同步完成后,通过 Webhook 或 Announce 通知用户

性能与资源考量

指标CronHeartbeat
CPU 开销仅触发时每次心跳
内存占用任务列表常驻事件队列常驻
网络 I/O仅执行时每次心跳可能检查
适合任务量大量定时任务少量实时事件

决策流程图

需要自动化调度?

    ├── 精确时间触发? ──── Yes ──> 使用 Cron

    ├── 响应外部事件? ──── Yes ──> 使用 Heartbeat

    ├── 两者都需要? ──── Yes ──> 组合使用

    └── 不确定? ──── 从 Cron 开始,需要时加入 Heartbeat

🇨🇳 中国用户须知

  • Cron 时区务必设置为 Asia/Shanghai,避免因服务器部署在海外导致时间偏差
  • 心跳间隔不建议设置过小(<5s),以免在低配服务器上造成性能压力
  • 国内云服务器(如阿里云 ECS)的定时任务与 OpenClaw Cron 不冲突,但建议统一由 OpenClaw 管理以减少维护成本

基于MIT协议开源 | 内容翻译自 官方文档,同步更新