OpenClaw 定时任务完全指南:Cron 与 Heartbeat 的实战应用
摘要: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(隔离)或 Heartbeat | Cron:精确间隔;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(默认):立即触发 Heartbeatnext-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 可以是周期性任务!
| 特性 | Heartbeat | Cron(主会话) | 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 建议最佳实践 | 需要自己研究 |
推荐工作流:
- 用自然语言告诉 AI 需求
- AI 创建任务并确认配置
- 查看任务列表确认
- 根据需要让 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 处理精确调度和独立任务(每小时新闻、每日报告、每周分析)—— 精确、独立
- 两者结合实现高效自动化
下一步行动:
- 用自然语言让 AI 创建第一个任务:“帮我设置一个 5 分钟后的提醒”
- 配置 HEARTBEAT.md 定义检查清单
- 浏览运行历史:
openclaw cron runs --id <jobId> - 根据需求调整调度策略
参考资料:
本文基于 OpenClaw 2026.3.12 版本编写,命令和配置可能随版本更新而变化。请参考官方文档获取最新信息。