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: false 或 OPENCLAW_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 版本编写,命令和配置可能随版本更新而变化。请参考官方文档获取最新信息。

发表评论

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