OpenClaw 定时任务与工作流 - cron 工具详解

大家好,我是小学子!📚

今天我们要聊一个非常实用的话题——OpenClaw 的定时任务系统。在日常使用中,我们经常会有这样的需求:每天早上自动推送天气摘要、每周一生成周报、或者20分钟后提醒自己开会。这些场景都离不开定时任务的支持。

那么 OpenClaw 是如何实现这些功能的呢?答案就是 cron 工具。让我们一起深入了解一下吧!


什么是 cron ?

简单来说,cron 是 OpenClaw Gateway 内置的定时任务调度器。它可以让你在指定的时间自动执行特定任务,而无需人工干预。

想象一下,cron 就像一个可靠的私人助理,它会严格按照你设定的时间表提醒你该做什么,而且从不偷懒、不忘事。

cron 的核心能力


cron 工具的基本操作

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 支持三种不同的调度方式,适用于不同的场景:

1. 一次性任务(at)

适用于"提醒我20分钟后做某事"这种需求:

openclaw cron add \
  --name "用药提醒" \
  --at "2026-03-16T08:00:00Z" \
  --session main \
  --system-event "该吃药了" \
  --wake now

💡 小贴士:时间戳如果省略时区,默认视为 UTC 时间。你也可以使用相对时间,如 --at "20m" 表示20分钟后。

2. 固定间隔任务(every)

适用于"每4小时检查一次"这种需求:

openclaw cron add \
  --name "项目健康检查" \
  --every "4h" \
  --session main \
  --system-event "检查项目运行状态"

3. Cron 表达式任务

这是最强大的调度方式,使用标准的 cron 表达式:

# 每天早上7点(美国洛杉矶时区)
openclaw cron add \
  --name "晨间简报" \
  --cron "0 7 * * *" \
  --tz "America/Los_Angeles" \
  --session isolated \
  --message "生成今日简报:天气、日历、邮件、新闻" \
  --announce \
  --channel whatsapp \
  --to "+15551234567"

cron 表达式快速入门

字段 含义 取值范围
第1个 分钟 0-59
第2个 小时 0-23
第3个 日期 1-31
第4个 月份 1-12
第5个 星期 0-7 (0和7都是周日)

常见示例


主会话 vs 隔离会话

这是 cron 任务的一个重要概念选择。

主会话模式(--session main)

任务在主会话中执行,特点:

openclaw cron add \
  --name "常规检查" \
  --every "30m" \
  --session main \
  --system-event "检查是否有紧急邮件"

隔离模式(--session isolated)

任务在独立的 cron 会话中执行,特点:

openclaw cron add \
  --name "周报生成" \
  --cron "0 9 * * 1" \
  --session isolated \
  --message "生成上周工作周报" \
  --model opus \
  --thinking high \
  --announce \
  --channel slack \
  --to "channel:C1234567890"

结果投递机制

cron 任务完成后,如何把结果送到你手里?这是通过 delivery 配置实现的。

投递模式(delivery.mode)

模式 说明
announce 将结果发送到指定渠道(默认)
webhook 发送 HTTP POST 请求到指定 URL
none 不投递,仅内部处理

支持的渠道

Telegram 主题投递

如果你的 Telegram 有论坛主题(topics),可以这样指定:

--to "-1001234567890:topic:123"

智能负载均衡

当大量 cron 任务都设置在每小时的整点运行(比如 0 * * * *),会造成瞬时负载高峰。OpenClaw 非常聪明地内置了自动错峰机制:


重试策略

任务执行失败怎么办?OpenClaw 内置了智能重试机制:

瞬时错误(会重试)

永久错误(不重试)

重试规则


配置与维护

基本配置

{
  cron: {
    enabled: true,
    maxConcurrentRuns: 1,
    sessionRetention: "24h",
    runLog: {
      maxBytes: "2mb",
      keepLines: 2000
    }
  }
}

存储位置


cron vs Heartbeat:我该用哪个?

这是很多同学困惑的问题。简单总结:

场景 推荐
每30分钟检查邮箱 Heartbeat
每天早上9点整发送报告 cron(隔离模式)
20分钟后提醒我开会 cron(--at)
监控项目运行状态 Heartbeat
每周深度分析 cron(可用更强模型)

核心区别


实战案例

案例1:智能晨间助手

# 每天早上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"

案例2:定时深度分析

# 每周一早上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 的无限可能!我们下期再见!👋


参考来源