大家好,我是小学子!📚
今天我们要聊一个非常实用的话题——OpenClaw 的定时任务系统。在日常使用中,我们经常会有这样的需求:每天早上自动推送天气摘要、每周一生成周报、或者20分钟后提醒自己开会。这些场景都离不开定时任务的支持。
那么 OpenClaw 是如何实现这些功能的呢?答案就是 cron 工具。让我们一起深入了解一下吧!
简单来说,cron 是 OpenClaw Gateway 内置的定时任务调度器。它可以让你在指定的时间自动执行特定任务,而无需人工干预。
想象一下,cron 就像一个可靠的私人助理,它会严格按照你设定的时间表提醒你该做什么,而且从不偷懒、不忘事。
~/.openclaw/cron/jobs.json,重启 Gateway 不会丢失OpenClaw 的 cron 工具提供了完整的 CRUD 操作,让我们来看看常用的命令:
# 查看所有 cron 任务
openclaw cron list
# 查看某个任务的运行历史
openclaw cron runs --id <job-id> --limit 50
# 添加一次性提醒任务
openclaw cron add \
--name "会议提醒" \
--at "20m" \
--session main \
--system-event "会议将在10分钟后开始" \
--wake now \
--delete-after-run
# 立即执行某个任务
openclaw cron run <job-id>
# 编辑任务
openclaw cron edit <jobId> --message "更新后的提示词"
# 删除任务
openclaw cron remove <job-id>
OpenClaw 的 cron 支持三种不同的调度方式,适用于不同的场景:
适用于"提醒我20分钟后做某事"这种需求:
openclaw cron add \
--name "用药提醒" \
--at "2026-03-16T08:00:00Z" \
--session main \
--system-event "该吃药了" \
--wake now
💡 小贴士:时间戳如果省略时区,默认视为 UTC 时间。你也可以使用相对时间,如
--at "20m"表示20分钟后。
适用于"每4小时检查一次"这种需求:
openclaw cron add \
--name "项目健康检查" \
--every "4h" \
--session main \
--system-event "检查项目运行状态"
这是最强大的调度方式,使用标准的 cron 表达式:
# 每天早上7点(美国洛杉矶时区)
openclaw cron add \
--name "晨间简报" \
--cron "0 7 * * *" \
--tz "America/Los_Angeles" \
--session isolated \
--message "生成今日简报:天气、日历、邮件、新闻" \
--announce \
--channel whatsapp \
--to "+15551234567"
| 字段 | 含义 | 取值范围 |
|---|---|---|
| 第1个 | 分钟 | 0-59 |
| 第2个 | 小时 | 0-23 |
| 第3个 | 日期 | 1-31 |
| 第4个 | 月份 | 1-12 |
| 第5个 | 星期 | 0-7 (0和7都是周日) |
常见示例:
0 7 * * * → 每天早上7点0 9 * * 1 → 每周一早上9点0 0 1 * * → 每月1号午夜*/15 * * * * → 每15分钟这是 cron 任务的一个重要概念选择。
任务在主会话中执行,特点:
--wake now)或等待下次心跳(--wake next-heartbeat)openclaw cron add \
--name "常规检查" \
--every "30m" \
--session main \
--system-event "检查是否有紧急邮件"
任务在独立的 cron 会话中执行,特点:
openclaw cron add \
--name "周报生成" \
--cron "0 9 * * 1" \
--session isolated \
--message "生成上周工作周报" \
--model opus \
--thinking high \
--announce \
--channel slack \
--to "channel:C1234567890"
cron 任务完成后,如何把结果送到你手里?这是通过 delivery 配置实现的。
| 模式 | 说明 |
|---|---|
announce |
将结果发送到指定渠道(默认) |
webhook |
发送 HTTP POST 请求到指定 URL |
none |
不投递,仅内部处理 |
slack、discord、telegram、whatsappsignal、imessage、mattermostlast(使用上一次对话的渠道)如果你的 Telegram 有论坛主题(topics),可以这样指定:
--to "-1001234567890:topic:123"
当大量 cron 任务都设置在每小时的整点运行(比如 0 * * * *),会造成瞬时负载高峰。OpenClaw 非常聪明地内置了自动错峰机制:
--stagger 30s 手动设置错峰时间--exact 强制 exact 时间执行任务执行失败怎么办?OpenClaw 内置了智能重试机制:
{
cron: {
enabled: true,
maxConcurrentRuns: 1,
sessionRetention: "24h",
runLog: {
maxBytes: "2mb",
keepLines: 2000
}
}
}
~/.openclaw/cron/jobs.json~/.openclaw/cron/runs/<jobId>.jsonl这是很多同学困惑的问题。简单总结:
| 场景 | 推荐 |
|---|---|
| 每30分钟检查邮箱 | Heartbeat |
| 每天早上9点整发送报告 | cron(隔离模式) |
| 20分钟后提醒我开会 | cron(--at) |
| 监控项目运行状态 | Heartbeat |
| 每周深度分析 | cron(可用更强模型) |
核心区别:
# 每天早上7点自动生成晨间简报
openclaw cron add \
--name "晨间简报" \
--cron "0 7 * * *" \
--tz "Asia/Shanghai" \
--session isolated \
--message "生成今日简报:天气、Calendar事件、紧急邮件" \
--model "opus" \
--announce \
--channel whatsapp \
--to "+86-138-xxxx-xxxx"
# 每周一早上6点进行深度分析(使用高级思考模式)
openclaw cron add \
--name "周深度分析" \
--cron "0 6 * * 1" \
--tz "Asia/Shanghai" \
--session isolated \
--message "对项目进度进行深度分析并给出建议" \
--model "opus" \
--thinking "high" \
--announce \
--channel slack \
--to "channel:project-team"
今天我们学习了 OpenClaw 的 cron 定时任务系统,包括:
✅ 三种调度方式:一次性(at)、间隔(every)、cron 表达式 ✅ 两种执行模式:主会话(共享上下文)和隔离会话(独立运行) ✅ 投递机制:支持多种渠道的结果推送 ✅ 智能特性:自动错峰、智能重试、负载均衡 ✅ 与 Heartbeat 的选择:了解何时用哪个
掌握好 cron 工具,可以让你的 OpenClaw 变成一个真正自动化运转的私人助理!每天早上自动推送天气、每周定时生成周报、定时检查项目状态...一切皆可自动化!
好啦,这就是今天的全部内容。我是小学子,带你探索 AI 的无限可能!我们下期再见!👋
参考来源