2026年3月22日 5 分钟阅读

OpenClaw 定时任务完全指南:Cron 与 Heartbeat 的实战应用

tinyash 0 条评论
openclaw

摘要:OpenClaw 提供了两种定时任务机制——Cron 和 Heartbeat。Cron 适合精确时间调度和独立任务,Heartbeat 适合批量周期性检查。本文将详细介绍两者的区别、配置方法、实战场景,以及如何用自然语言让 AI 自动配置定时任务,帮助你构建高效的自动化工作流。


一、OpenClaw 定时任务概述

OpenClaw 的定时任务系统设计目标:

让 AI 代理能够在正确的时间,以正确的方式,执行正确的任务。

1.1 两种机制

OpenClaw 提供两种定时任务机制:

机制调度类型执行位置核心特点
Cron一次性 或 周期性主会话 或 隔离会话精确时间、独立执行、可配置交付
Heartbeat固定间隔周期性主会话批量检查、上下文感知、智能抑制

关键区别

  • Cron 可以是周期性的(使用 cron 表达式或 every 间隔),也可以是一次性的(使用 at 时间戳)
  • Heartbeat 只能是周期性的(固定间隔,默认 30 分钟),但支持批量检查多项任务

1.2 核心概念

Cron 任务

  • 调度灵活:支持一次性(at)、固定间隔(every)、cron 表达式(cron
  • 执行模式:主会话(systemEvent)或隔离会话(agentTurn)
  • 隔离会话:不影响主会话历史,每次运行都是全新上下文
  • 模型覆盖:可为每个任务指定不同的模型和思维级别
  • 交付控制:可直接发送到频道、Webhook,或静默执行

Heartbeat(心跳)

  • 固定间隔:默认每 30 分钟执行一次(可配置)
  • 主会话执行:有完整的对话上下文
  • 检查清单:通过 HEARTBEAT.md 定义多项检查任务
  • 智能抑制:无重要事项时回复 HEARTBEAT_OK,不发送消息
  • 批量处理:一次 Heartbeat 可同时检查邮箱、日历、通知等多项任务

1.3 快速决策指南

使用场景推荐机制原因
每 30 分钟检查邮箱Heartbeat可与日历、通知等批量执行,成本低
每天早上 9 点准时发送报告Cron(隔离)需要精确时间,不是”大约 9 点”
每 4 小时检查项目状态Cron(隔离)或 HeartbeatCron:精确间隔;Heartbeat:批量检查
监控日历即将开始的事件Heartbeat周期性感知的自然场景,有上下文
每周深度分析Cron(隔离)独立任务,可用更强模型
20 分钟后提醒我Cron(主会话,--at一次性精确提醒
后台项目健康检查Heartbeat利用现有周期,批量处理
每小时发布 AI 新闻Cron(隔离)固定间隔,独立执行,静默运行

二、Cron 定时任务详解

2.1 Cron 基础

Cron 是 OpenClaw Gateway 内置的调度器,特点:

  • 持久化:任务存储在 ~/.openclaw/cron/jobs.json,重启不丢失
  • 灵活调度:支持一次性、周期性、cron 表达式
  • 两种执行模式:主会话(systemEvent)和隔离会话(agentTurn)
  • 交付控制:可直接发送到频道或 Webhook
  • 重试机制:失败时自动重试,指数退避

2.2 调度类型

Cron 支持三种调度类型:

类型 1:一次性任务(at)

# 20 分钟后执行
openclaw cron add --at "20m" --session main --system-event "提醒我休息"

# 指定 UTC 时间
openclaw cron add --at "2026-03-22T10:00:00Z" --session main --system-event "会议提醒"

# 带时区的时间(自动转换为 UTC)
openclaw cron add --at "2026-03-22T18:00:00+08:00" --session main --system-event "晚餐时间"

注意:ISO 时间戳不带时区时,视为 UTC。

类型 2:固定间隔(every)

# 每 4 小时执行
openclaw cron add --every "4h" --session isolated --message "检查项目状态"

# 每 30 分钟执行
openclaw cron add --every "30m" --session isolated --message "检查邮件"

# 每 15 分钟执行(毫秒)
openclaw cron add --every 900000 --session isolated --message "监控告警"

类型 3:Cron 表达式

# 每天早上 7 点
openclaw cron add --cron "0 7 * * *" --session isolated --message "晨间简报"

# 每周一上午 9 点
openclaw cron add --cron "0 9 * * 1" --session isolated --message "周会准备"

# 每小时整点(带 30 秒随机偏移,避免负载集中)
openclaw cron add --cron "0 * * * *" --stagger 30s --session isolated --message "整点检查"

# 每秒执行(6 字段 cron,带时区)
openclaw cron add --cron "0 * * * * *" --tz "UTC" --session isolated --message "秒级监控"

Cron 表达式格式

分 时 日 月 星期
0  7  *  *  *    → 每天 7:00
0  9  *  * 1     → 每周一 9:00
*/5 *  *  * *    → 每 5 分钟
0  *  *  * *     → 每小时整点(自动偏移 0-5 分钟)

6 字段格式(带秒)

秒 分 时 日 月 星期
0  0  7  *  * *   → 每天 7:00:00

2.3 执行模式

模式 1:主会话(Main Session)

主会话任务通过系统事件(systemEvent)执行,特点:

  • 在下次 Heartbeat 时执行
  • 有完整的会话上下文
  • 使用主会话的模型配置
  • 适合需要上下文的提醒
openclaw cron add \
  --name "项目检查" \
  --every "4h" \
  --session main \
  --system-event "进行项目健康检查" \
  --wake now

--wake 选项

  • now(默认):立即触发 Heartbeat
  • next-heartbeat:等待下次计划的 Heartbeat

模式 2:隔离会话(Isolated Session)

隔离会话任务独立执行,特点:

  • cron:<jobId> 会话中执行
  • 每次运行都是全新会话(无历史)
  • 可覆盖模型和思维级别
  • 默认直接交付结果(announce)
  • 不污染主会话历史
openclaw cron add \
  --name "晨间简报" \
  --cron "0 7 * * *" \
  --session isolated \
  --message "总结 overnight 的邮件和日历" \
  --announce \
  --channel whatsapp \
  --to "+15551234567"

2.4 交付模式(Delivery)

隔离会话支持三种交付模式:

模式 1:Announce(直接交付)

openclaw cron add \
  --name "每日状态" \
  --cron "0 8 * * *" \
  --session isolated \
  --message "生成每日状态报告" \
  --announce \
  --channel telegram \
  --to "123456789"

行为

  • 直接通过频道适配器发送
  • 主会话会收到简短摘要
  • 不会触发主会话的消息工具

模式 2:Webhook

openclaw cron add \
  --name "告警推送" \
  --cron "0 * * * *" \
  --session isolated \
  --message "检查系统状态" \
  --delivery-mode webhook \
  --delivery-to "https://example.com/webhook"

行为

  • POST 完成事件到指定 URL
  • 不尝试频道交付
  • 主会话无摘要

配置 Bearer Token

{
  cron: {
    webhookToken: "your-bearer-token"
  }
}

模式 3:None(内部执行)

openclaw cron add \
  --name "后台清理" \
  --cron "0 3 * * *" \
  --session isolated \
  --message "清理临时文件" \
  --no-deliver

行为

  • 无交付,无摘要
  • 纯后台任务

2.5 模型和思维覆盖

隔离会话可以覆盖模型和思维级别:

# 使用更强的模型进行深度分析
openclaw cron add \
  --name "深度分析" \
  --cron "0 6 * * 1" \
  --session isolated \
  --message "周度代码库深度分析" \
  --model "opus" \
  --thinking high \
  --announce

# 使用更便宜的模型进行例行检查
openclaw cron add \
  --name "例行检查" \
  --cron "0 * * * *" \
  --session isolated \
  --message "检查系统状态" \
  --model "qwen3.5-9b" \
  --thinking off \
  --no-deliver

思维级别选项

  • off – 关闭思考
  • minimal – 最小思考
  • low – 低思考
  • medium – 中思考
  • high – 高思考
  • xhigh – 超高思考

注意:思维级别仅支持 GPT-5.2 + Codex 模型。

2.6 轻量级引导上下文

对于不需要完整工作区引导的任务,可以使用轻量级模式:

openclaw cron add \
  --name "轻量级晨间简报" \
  --cron "0 7 * * *" \
  --session isolated \
  --message "总结 overnight 更新" \
  --light-context \
  --no-deliver

适用场景

  • 简单的数据查询
  • 不依赖工作区文件
  • 需要更快启动

2.7 重试策略

Cron 任务失败时自动重试:

一次性任务(at)

  • 瞬态错误(429、5xx、网络错误):重试最多 3 次,指数退避(30s → 1m → 5m)
  • 永久错误(认证失败、配置错误):立即禁用

周期性任务(cron/every)

  • 任何错误:应用指数退避(30s → 1m → 5m → 15m → 60m)
  • 任务保持启用状态
  • 下次成功后重置退避

配置自定义重试策略

{
  cron: {
    retry: {
      maxAttempts: 5,
      backoffMs: [60000, 120000, 300000, 600000],
      retryOn: ["rate_limit", "overloaded", "network", "server_error"]
    }
  }
}

2.8 任务存储和维护

存储位置

  • 任务定义:~/.openclaw/cron/jobs.json
  • 运行历史:~/.openclaw/cron/runs/<jobId>.jsonl

自动维护

{
  cron: {
    sessionRetention: "24h",  // 隔离会话保留时间
    runLog: {
      maxBytes: "2mb",        // 运行日志最大大小
      keepLines: 2000         // 保留最新行数
    }
  }
}

高容量场景优化

{
  cron: {
    sessionRetention: "12h",  // 缩短会话保留
    runLog: {
      maxBytes: "3mb",
      keepLines: 1500
    }
  }
}

三、Heartbeat 心跳任务详解

3.1 Heartbeat 基础

Heartbeat 是 OpenClaw 的周期性检查机制,特点:

  • 默认每 30 分钟执行一次
  • 在主会话中运行,有完整上下文
  • 通过 HEARTBEAT.md 定义检查清单
  • 智能抑制(无重要事项时回复 HEARTBEAT_OK

3.2 配置 Heartbeat

基础配置

{
  agents: {
    defaults: {
      heartbeat: {
        every: "30m",                    // 间隔
        target: "last",                  // 交付目标
        activeHours: {
          start: "08:00",
          end: "22:00"
        }                                // 活跃时间(可选)
      }
    }
  }
}

创建 HEARTBEAT.md

# Heartbeat 检查清单

- 检查邮箱是否有紧急邮件
- 查看未来 2 小时的日历事件
- 如果有后台任务完成,总结结果
- 如果空闲超过 8 小时,发送简短问候

3.3 Heartbeat 优势

批量检查: 一次 Heartbeat 可以处理多个检查项,比多个独立 Cron 任务更高效。

上下文感知: AI 知道最近在做什么,可以智能判断优先级。

对话连续性: Heartbeat 共享主会话,可以自然跟进之前的对话。

低成本: 一次 Heartbeat 比 5 个独立 Cron 任务便宜。

智能抑制: 无重要事项时回复 HEARTBEAT_OK,不发送消息。

3.4 Heartbeat 状态管理

可以创建状态文件跟踪检查历史:

// memory/heartbeat-state.json
{
  "lastChecks": {
    "email": 1774147055723,
    "calendar": 1774147055723,
    "weather": null
  }
}

在 HEARTBEAT.md 中引用

# Heartbeat 检查清单

读取 `memory/heartbeat-state.json`,只检查超过 30 分钟未检查的项目。

四、Cron vs Heartbeat:如何选择

4.1 决策流程图

任务需要精确时间执行吗?
  YES → 使用 Cron
  NO  → 继续...

任务需要与主会话隔离吗?
  YES → 使用 Cron(隔离)
  NO  → 继续...

这个任务可以与其他周期性检查批量执行吗?
  YES → 使用 Heartbeat(添加到 HEARTBEAT.md)
  NO  → 继续...

这是一次性提醒吗?
  YES → 使用 Cron(--at)
  NO  → 继续...

需要不同的模型或思维级别吗?
  YES → 使用 Cron(隔离)+ --model/--thinking
  NO  → 使用 Heartbeat

4.2 对比表格

重要澄清:Cron 可以是周期性任务

特性HeartbeatCron(主会话)Cron(隔离)
调度类型固定间隔(如每 30 分钟)一次性 或 周期性一次性 或 周期性
会话主会话主会话(系统事件)cron:<jobId>
历史共享共享每次运行全新
上下文完整完整无(干净启动)
模型主会话模型主会话模型可覆盖
输出HEARTBEAT_OK 时交付Heartbeat 提示 + 事件直接交付(默认)
时机固定间隔精确时间/间隔精确时间/间隔
成本低(批量)高(独立运行)

Cron 周期性示例

# 每小时执行(周期性)
openclaw cron add --every "1h" --session isolated --message "检查新闻"

# 每天早上 7 点(周期性)
openclaw cron add --cron "0 7 * * *" --session isolated --message "晨间简报"

# 20 分钟后(一次性)
openclaw cron add --at "20m" --session main --system-event "提醒我休息"

Heartbeat 周期性示例

# HEARTBEAT.md(每 30 分钟自动执行)
- 检查邮箱
- 查看日历
- 审查项目状态

4.3 组合使用

最高效的自动化设置是同时使用两者

Heartbeat(每 30 分钟):

# HEARTBEAT.md

- 扫描邮箱查找紧急邮件
- 检查未来 2 小时的日历事件
- 审查待处理任务
- 如果安静超过 8 小时,简短问候

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

五、实战示例

5.1 示例 1:批量状态检查(Heartbeat)

场景:每 30 分钟批量检查多个系统

HEARTBEAT.md

# Heartbeat 检查清单

## 邮箱检查
- 扫描收件箱查找紧急邮件(过去 30 分钟)
- 标记需要回复的邮件

## 日历检查
- 查看未来 2 小时的事件
- 准备会议材料(如有)

## 项目状态
- 检查 CI/CD 流水线状态
- 审查未处理的 PR

## 主动问候
- 如果空闲超过 8 小时,发送简短问候
- 如果有重要更新,主动报告

配置

{
  agents: {
    defaults: {
      heartbeat: {
        every: "30m",
        target: "last",
        activeHours: {
          start: "08:00",
          end: "22:00"
        }
      }
    }
  }
}

5.2 示例 2:每日邮件摘要推送

场景:每天早上 8 点发送 AI 资讯汇总到邮箱

openclaw cron add \
  --name "每日 AI 资讯汇总(邮件推送)" \
  --cron "0 8 * * *" \
  --tz "Asia/Shanghai" \
  --session isolated \
  --message "执行每日新闻汇总任务:
1. 运行 python3 /workspace/scripts/fetch_news.py 获取新闻
2. 对每条新闻翻译标题和详细摘要(300-500 字)
3. 通过 python3 /workspace/scripts/send_news_email.py 发送邮件
4. 报告发送结果" \
  --model "bailian/qwen3.5-plus" \
  --no-deliver

关键点

  • 使用 --tz "Asia/Shanghai" 指定时区
  • 调用本地脚本执行实际任务
  • 翻译 + 摘要提升阅读体验

5.3 示例 3:会议提醒

场景:会议前 15 分钟提醒

openclaw cron add \
  --name "会议提醒" \
  --at "15m" \
  --session main \
  --system-event "提醒:15 分钟后有站会" \
  --wake now \
  --delete-after-run

关键点

  • 使用 --at "15m" 一次性执行
  • 主会话确保上下文完整
  • --wake now 立即触发
  • --delete-after-run 执行后自动删除

5.4 示例 4:Telegram 话题交付

场景:每晚 10 点发送日报到 Telegram 话题

openclaw cron add \
  --name "夜间总结(话题)" \
  --cron "0 22 * * *" \
  --tz "America/Los_Angeles" \
  --session isolated \
  --message "总结今天的工作,发送到夜间话题" \
  --announce \
  --channel telegram \
  --to "-1001234567890:topic:123"

Telegram 话题格式

  • -1001234567890 – 仅聊天 ID
  • -1001234567890:topic:123 – 明确话题格式(推荐)
  • -1001234567890:123 – 简写格式

5.5 示例 5:周度深度分析

场景:每周一早上 6 点进行代码库深度分析

openclaw cron add \
  --name "深度分析" \
  --cron "0 6 * * 1" \
  --tz "America/Los_Angeles" \
  --session isolated \
  --message "周度项目进度深度分析:
1. 检查本周 git 提交
2. 分析代码质量变化
3. 识别潜在问题
4. 生成改进建议" \
  --model "opus" \
  --thinking high \
  --announce \
  --channel whatsapp \
  --to "+15551234567"

关键点

  • 使用更强的模型(opus)
  • 高思维级别进行深度分析
  • 结果推送到 WhatsApp

5.6 示例 6:多代理任务分配

场景:多代理设置中,指定特定代理执行任务

# 指定 ops 代理执行运维检查
openclaw cron add \
  --name "运维检查" \
  --cron "0 6 * * *" \
  --session isolated \
  --message "检查运维队列" \
  --agent ops

# 修改现有任务的代理
openclaw cron edit <jobId> --agent ops

# 清除代理绑定(使用默认代理)
openclaw cron edit <jobId> --clear-agent

六、用自然语言让 AI 自动配置定时任务

OpenClaw 的强大之处在于:你不需要记住复杂的 CLI 命令,直接用自然语言告诉 AI,它会自动帮你配置定时任务。

6.1 基础示例:直接告诉 AI 你的需求

对话示例

你:帮我设置一个每天早上 8 点的提醒,提醒我查看项目进度

AI:好的,我来为你创建一个定时任务:
- 名称:项目进度检查
- 时间:每天早上 8:00(Asia/Shanghai 时区)
- 内容:提醒你查看项目进度

正在创建...

✅ 任务已创建!
- 任务 ID:abc123
- 下次执行:明天 08:00
- 你可以用 `openclaw cron list` 查看所有任务

需要我调整时间或内容吗?

AI 实际执行的命令

openclaw cron add \
  --name "项目进度检查" \
  --cron "0 8 * * *" \
  --tz "Asia/Shanghai" \
  --session main \
  --system-event "提醒:查看项目进度" \
  --wake now

6.2 修改现有任务

对话示例

你:把早上 8 点的提醒改成 9 点

AI:好的,我来修改任务 "项目进度检查":
- 原时间:每天 08:00
- 新时间:每天 09:00

正在更新...

✅ 任务已更新!
- 下次执行:明天 09:00

AI 实际执行的命令

openclaw cron edit <jobId> --cron "0 9 * * *" --tz "Asia/Shanghai"

6.3 删除任务

对话示例

你:删除那个新闻检查任务

AI:好的,我来删除任务 "项目进度检查"。

确认:这个任务将被永久删除,无法恢复。确认继续吗?

你:确认

AI:✅ 任务已删除!

AI 实际执行的命令

openclaw cron remove <jobId>

6.4 查看任务状态

对话示例

你:我有哪些定时任务?

AI:让我查看一下...

你当前有 3 个定时任务:

1. **项目进度检查**
   - 频率:每天 09:00
   - 类型:主会话提醒
   - 状态:✅ 启用
   - 下次执行:明天 09:00

2. **AI News Auto Publisher**
   - 频率:每小时
   - 类型:隔离会话
   - 状态:✅ 启用
   - 下次执行:23 分钟后

3. **周报生成**
   - 频率:每周一 09:00
   - 类型:隔离会话
   - 状态:❌ 禁用
   - 上次执行:3 天前

需要我启用"周报生成"任务吗?

AI 实际执行的命令

openclaw cron list --include-disabled

6.5 查看执行历史

对话示例

你:新闻任务最近执行得怎么样?

AI:让我查看一下 "AI News Auto Publisher" 的执行历史...

最近 5 次执行:

1. ✅ 成功 - 11:00(23 秒)
   - 发布了 1 篇文章到 WordPress

2. ✅ 成功 - 10:00(19 秒)
   - 跳过(2 小时内已有文章)

3. ✅ 成功 - 09:00(25 秒)
   - 发布了 1 篇文章到 WordPress

4. ❌ 失败 - 08:00
   - 错误:WordPress API 超时
   - 已自动重试,下次执行将恢复正常

5. ✅ 成功 - 07:00(21 秒)
   - 发布了 1 篇文章到 WordPress

总体成功率:80%(4/5)

AI 实际执行的命令

openclaw cron runs --id <jobId> --limit 5

6.6 常用自然语言指令

你可以用这些方式告诉 AI:

自然语言指令AI 理解的操作
“每天早上 X 点提醒我…”创建 cron 表达式任务
“每 X 小时/分钟检查…”创建 every 间隔任务
“X 分钟后提醒我”创建 at 一次性任务
“把 X 任务改成 Y 时间”编辑现有任务
“删除 X 任务”删除任务
“我有哪些定时任务”列出任务
“X 任务执行得怎么样”查看运行历史
“暂停/启用 X 任务”禁用/启用任务
“立即运行 X 任务”手动触发任务

6.7 AI 配置的优势

使用 AI 自动配置 vs 手动 CLI

方面AI 自动配置手动 CLI
学习成本无需记忆命令需要学习 CLI 语法
错误处理AI 自动纠正手动排查错误
复杂任务AI 帮你拆解需要自己设计
时区处理AI 自动转换需要手动指定
任务优化AI 建议最佳实践需要自己研究

推荐工作流

  1. 用自然语言告诉 AI 需求
  2. AI 创建任务并确认配置
  3. 查看任务列表确认
  4. 根据需要让 AI 调整

七、CLI 命令参考

7.1 添加任务

# 一次性任务(主会话)
openclaw cron add \
  --name "提醒" \
  --at "2026-03-22T18:00:00Z" \
  --session main \
  --system-event "提醒文本" \
  --wake now \
  --delete-after-run

# 周期性任务(隔离会话)
openclaw cron add \
  --name "晨间状态" \
  --cron "0 7 * * *" \
  --tz "America/Los_Angeles" \
  --session isolated \
  --message "生成晨间简报" \
  --announce \
  --channel whatsapp \
  --to "+15551234567"

# 带随机偏移的任务
openclaw cron add \
  --name "分钟监控" \
  --cron "0 * * * * *" \
  --tz "UTC" \
  --stagger 30s \
  --session isolated \
  --message "执行检查"

# 轻量级引导
openclaw cron add \
  --name "轻量级简报" \
  --cron "0 7 * * *" \
  --session isolated \
  --message "总结更新" \
  --light-context \
  --no-deliver

6.2 列出任务

# 列出所有任务
openclaw cron list

# 包含禁用的任务
openclaw cron list --include-disabled

6.3 编辑任务

# 更新消息和模型
openclaw cron edit <jobId> \
  --message "更新后的提示" \
  --model "opus" \
  --thinking low

# 更新交付设置
openclaw cron edit <jobId> \
  --announce \
  --channel telegram \
  --to "123456789"

# 禁用交付
openclaw cron edit <jobId> --no-deliver

# 启用轻量级引导
openclaw cron edit <jobId> --light-context

# 强制精确时间(无偏移)
openclaw cron edit <jobId> --exact

6.4 运行任务

# 立即运行(强制)
openclaw cron run <jobId>

# 仅在到期时运行
openclaw cron run <jobId> --due

注意cron run 在任务入队后立即返回,使用 openclaw cron runs --id <jobId> 查看结果。

6.5 查看运行历史

# 查看最近 50 次运行
openclaw cron runs --id <jobId> --limit 50

6.6 删除任务

# 删除单个任务
openclaw cron remove <jobId>

# 删除多个任务
openclaw cron remove <jobId1> <jobId2>

6.7 发送系统事件(不创建任务)

# 立即触发
openclaw system event --mode now --text "下次 Heartbeat:检查电池"

# 下次 Heartbeat 触发
openclaw system event --mode next-heartbeat --text "检查项目状态"

七、故障排查

7.1 任务不执行

检查项

# 检查 Cron 是否启用
openclaw cron list

# 检查 Gateway 是否运行
openclaw gateway status

# 检查任务是否到期
openclaw cron runs --id <jobId>

可能原因

  • Cron 被禁用(cron.enabled: falseOPENCLAW_SKIP_CRON=1
  • Gateway 未持续运行
  • 时区配置错误

7.2 周期性任务反复延迟

原因:连续失败后应用指数退避

解决

  • 查看运行日志找出失败原因
  • 修复后下次成功运行会自动重置退避

7.3 Telegram 交付到错误位置

解决

  • 使用明确的话题格式:-100...:topic:<id>
  • 避免使用模糊的短格式

7.4 任务失败重试

查看重试状态

openclaw cron runs --id <jobId> --limit 10

瞬态错误(自动重试):

  • 429 速率限制
  • 5xx 服务器错误
  • 网络超时

永久错误(立即禁用):

  • 认证失败
  • 配置错误

八、最佳实践

8.1 任务设计

保持任务专注

  • 每个任务做一件事
  • 避免过长的提示
  • 明确成功标准

错误处理

  • 任务内部包含错误处理逻辑
  • 失败时记录详细日志
  • 考虑重试策略

去重机制

  • 周期性任务检查上次执行时间
  • 避免重复执行相同任务

8.2 成本控制

Heartbeat 优化

  • 保持 HEARTBEAT.md 简洁
  • 批量相似检查
  • 使用 target: "none" 仅内部处理

Cron 优化

  • 例行任务使用更便宜的模型
  • 避免过于频繁的执行
  • 使用 --no-deliver 减少消息

8.3 维护建议

定期检查

# 每周检查任务状态
openclaw cron list

# 查看失败任务
openclaw cron runs --id <jobId> --limit 10

清理旧任务

# 删除不再需要的任务
openclaw cron remove <jobId>

备份配置

# 备份任务定义
cp ~/.openclaw/cron/jobs.json ~/.openclaw/cron/jobs.json.bak

8.4 安全考虑

敏感操作

  • 避免在任务中包含敏感信息
  • 使用环境变量存储密钥
  • 谨慎使用 Webhook 交付

权限控制

  • 限制任务的执行权限
  • 审查第三方任务代码
  • 定期更新任务依赖

九、高级用法

9.1 链式任务

创建依赖关系,一个任务完成后触发另一个:

# 任务 1:数据收集
openclaw cron add \
  --name "数据收集" \
  --cron "0 6 * * *" \
  --session isolated \
  --message "收集昨日数据" \
  --no-deliver

# 任务 2:数据分析(任务 1 完成后)
openclaw cron add \
  --name "数据分析" \
  --cron "0 7 * * *" \
  --session isolated \
  --message "分析收集的数据" \
  --announce

9.2 条件执行

在任务内部实现条件逻辑:

openclaw cron add \
  --name "条件检查" \
  --cron "0 9 * * *" \
  --session isolated \
  --message "检查条件:
1. 如果昨天有提交,生成报告
2. 如果没有提交,跳过
3. 如果有失败的 CI,发送告警"

9.3 与 Lobster 工作流集成

Lobster 是多步工具管道的工作流运行时:

openclaw cron add \
  --name "审批工作流" \
  --cron "0 10 * * *" \
  --session isolated \
  --message "执行 Lobster 工作流:
1. 调用 lobster 工具
2. 如果需要审批,等待用户确认
3. 审批后继续执行"

十、总结

Cron 核心价值

  • 一次性 或 周期性调度(at / every / cron)
  • ✅ 精确时间控制(准时执行,不是”大约”)
  • ✅ 隔离会话执行(不污染主历史)
  • ✅ 模型和思维覆盖(每个任务可不同)
  • ✅ 灵活交付选项(announce / webhook / none)
  • ✅ 自动重试机制(失败后指数退避)

Heartbeat 核心价值

  • ✅ 批量周期性检查(一次处理多项任务)
  • ✅ 上下文感知决策(知道最近在做什么)
  • ✅ 低成本监控(比多个 Cron 任务便宜)
  • ✅ 智能抑制(无事项时静默)
  • ✅ 对话连续性(共享主会话历史)

最佳组合

  • Heartbeat 处理日常监控(邮箱、日历、通知)—— 批量、低成本
  • Cron 处理精确调度和独立任务(每小时新闻、每日报告、每周分析)—— 精确、独立
  • 两者结合实现高效自动化

下一步行动

  1. 用自然语言让 AI 创建第一个任务:“帮我设置一个 5 分钟后的提醒”
  2. 配置 HEARTBEAT.md 定义检查清单
  3. 浏览运行历史:openclaw cron runs --id <jobId>
  4. 根据需求调整调度策略

参考资料


本文基于 OpenClaw 2026.3.12 版本编写,命令和配置可能随版本更新而变化。请参考官方文档获取最新信息。

发表评论

你的邮箱地址不会被公开,带 * 的为必填项。