OpenClaw Cron 高级模式 - 定时任务的十八般武艺

📅 2026-06-05 | 🏷️ OpenClaw · Cron · 自动化 | ⏱️ 阅读约14分钟

你的Agent还在等用户说话才干活?

一个"被动型"Agent就像一个只在被点名时才回答问题的学生——有用,但不够主动。真正厉害的Agent应该是:该干活时自己干活,该汇报时主动汇报

这就是 OpenClaw Cron 系统存在的意义。它让你的Agent从"你问我答"升级到"我不问你也干"。每天早上自动生成日报、每小时监控系统状态、每周五下午提醒你写周报——这些场景全靠 Cron 来实现。

如果你还没接触过 Cron,建议先看看 Cron 入门指南。本文是进阶篇,讲的是那些入门教程里不会告诉你的高级模式和实战技巧。

快速回顾:Cron 的三种 Schedule 类型

OpenClaw Cron 支持三种调度方式,每种适合不同场景:

// 1. at - 一次性定时任务(到点就执行,执行完就删除)
{
  "schedule": {
    "kind": "at",
    "at": "2026-06-05T09:00:00+08:00"  // ISO 8601 格式,必须带时区
  }
}

// 2. every - 间隔重复任务(每隔N毫秒执行一次)
{
  "schedule": {
    "kind": "every",
    "everyMs": 3600000  // 每小时执行一次(3600 * 1000)
  }
}

// 3. cron - Cron表达式(最灵活,支持复杂调度规则)
{
  "schedule": {
    "kind": "cron",
    "expr": "0 9 * * 1-5",    // 工作日每天早上9点
    "tz": "Asia/Shanghai"      // 时区很重要!
  }
}

选择建议:

  • at:一次性任务,比如"明天下午3点提醒我开会"
  • every:固定间隔轮询,比如"每5分钟检查一次服务状态"
  • cron:复杂调度规则,比如"每周一三五的上午10点和下午3点"

Payload 类型:Agent收到任务后做什么

Schedule 决定了"什么时候触发",Payload 决定了"触发后做什么"。OpenClaw 提供两种 Payload 类型:

systemEvent:注入系统事件

// systemEvent - 直接注入一条系统消息到对话上下文
// Agent会把这段文字当作系统事件来处理
{
  "payload": {
    "kind": "systemEvent",
    "text": "【每日提醒】现在是早上9点,请生成今日的AI新闻摘要。"
  }
}

systemEvent 适合轻量级任务:提醒、通知、状态注入。Agent收到后会在当前对话上下文中处理。

agentTurn:启动独立Agent会话

// agentTurn - 启动一个独立的Agent会话来执行任务
// 适合需要复杂处理、调用工具的任务
{
  "payload": {
    "kind": "agentTurn",
    "message": "请执行以下任务:\n1. 抓取今天的AI新闻\n2. 筛选最重要的5条\n3. 生成中文摘要\n4. 发送到飞书群",
    "model": "xiaomicoding/mimo-v2.5-pro",  // 可选:指定模型
    "timeoutSeconds": 300  // 可选:超时时间,默认300秒
  }
}

agentTurn 是重量级方案:它会启动一个完整的Agent会话,Agent可以调用工具、执行多步操作、生成复杂输出。适合日报生成、数据采集、自动化流水线等场景。

Delivery 模式:结果送到哪里

任务执行完了,结果发给谁?这就是 delivery 的作用。

// delivery 配置示例

// 1. announce - 广播到创建时指定的渠道(默认模式)
{
  "delivery": {
    "mode": "announce",
    "channel": "feishu:chat:oc_xxx"  // 指定飞书群
  }
}

// 2. webhook - 发送到外部HTTP接口
{
  "delivery": {
    "mode": "webhook",
    "url": "https://your-server.com/api/cron-result",
    "headers": {
      "Authorization": "Bearer your-token"
    }
  }
}

// 3. none - 不投递,仅记录日志(适合监控类任务)
{
  "delivery": {
    "mode": "none"
  }
}

一个实用技巧:对于监控类任务,可以设置 delivery 为 none,但加上条件触发——只有当检测到异常时才通过其他方式通知。这样可以避免"一切正常"的消息刷屏。

实战模式一:每日自动生成新闻日报

这是最常见的 Cron 使用场景。每天早上自动抓取AI新闻、生成摘要、推送到群聊。

// 完整配置:每日AI新闻日报
{
  "name": "daily-ai-news",
  "schedule": {
    "kind": "cron",
    "expr": "0 8 * * *",       // 每天早上8点
    "tz": "Asia/Shanghai"
  },
  "payload": {
    "kind": "agentTurn",
    "message": "执行每日AI新闻日报任务:\n\n1. 搜索过去24小时的AI领域重要新闻\n2. 筛选最有价值的5-8条\n3. 为每条新闻写一句话中文摘要\n4. 按重要性排序\n5. 生成Markdown格式的日报\n6. 发送到飞书群",
    "timeoutSeconds": 600
  },
  "delivery": {
    "mode": "announce"
  },
  "sessionTarget": "isolated"  // 隔离会话,不影响用户对话
}

关键配置说明:

  • sessionTarget: "isolated":使用隔离会话,日报生成过程不会干扰正在进行的用户对话
  • timeoutSeconds: 600:新闻抓取可能较慢,给10分钟超时
  • 消息内容要足够具体,告诉Agent每一步该做什么,减少歧义

实战模式二:系统监控与告警

每5分钟检查一次服务状态,异常时自动告警。这个模式的关键是"无事不报,有事必报"。

// 系统监控任务
{
  "name": "service-health-check",
  "schedule": {
    "kind": "every",
    "everyMs": 300000          // 每5分钟
  },
  "payload": {
    "kind": "agentTurn",
    "message": "执行系统健康检查:\n\n1. curl https://miaoquai.com 检查网站状态\n2. 检查 /var/log/nginx/error.log 最近5分钟的错误\n3. 检查磁盘使用率 df -h\n4. 检查内存使用 free -h\n\n如果一切正常,只输出 'OK'。\n如果有异常,输出详细异常信息并建议修复方案。",
    "timeoutSeconds": 120
  },
  "delivery": {
    "mode": "announce",
    "channel": "feishu:chat:oc_admin_group"
  }
}

注意消息中的关键指令:"如果一切正常,只输出 'OK'"。这能大幅减少噪音。配合飞书群的消息免打扰设置,只有异常告警才会实际通知到人。

实战模式三:内容定时发布

如果你想在特定时间自动发布内容(比如每天中午12点发一条推文),Cron + agentTurn 可以完美实现。

// 内容定时发布
{
  "name": "noon-content-post",
  "schedule": {
    "kind": "cron",
    "expr": "0 12 * * 1-5",   // 工作日中午12点
    "tz": "Asia/Shanghai"
  },
  "payload": {
    "kind": "agentTurn",
    "message": "生成一条今天适合发布的内容:\n\n1. 搜索今天AI领域的热门话题\n2. 写一条有深度、有观点的短文(200-300字)\n3. 风格:专业但有趣,有独到见解\n4. 加上3-5个相关hashtag\n5. 生成后保存到 /var/www/miaoquai/drafts/ 目录",
    "timeoutSeconds": 300
  },
  "delivery": {
    "mode": "announce"
  }
}

这个模式的巧妙之处在于:Agent生成内容并保存到草稿目录,你可以人工审核后再发布。全自动很好,但在内容发布这件事上,留一个人工审核环节更稳妥。

实战模式四:周期性数据采集

每隔一段时间采集数据并存入数据库,用于后续分析和报告生成。

// 每小时采集竞品数据
{
  "name": "competitor-scraper",
  "schedule": {
    "kind": "cron",
    "expr": "0 * * * *",      // 每小时整点
    "tz": "Asia/Shanghai"
  },
  "payload": {
    "kind": "agentTurn",
    "message": "竞品数据采集任务:\n\n1. 访问 futuretools.io 获取最新上架的AI工具数量\n2. 访问 thereisanaiforthat.com 获取今日新增工具\n3. 将数据写入 /var/data/competitor-log.csv,格式:时间,来源,新增数量\n4. 如果某个来源访问失败,记录错误但不中断任务",
    "timeoutSeconds": 180
  },
  "delivery": {
    "mode": "none"  // 采集任务不需要通知,数据存在文件里
  }
}

错误处理与重试策略

Cron 任务不是每次都能成功执行的。网络超时、API限流、目标服务宕机……这些情况都需要处理。

// 带错误处理的Cron任务配置
{
  "name": "resilient-task",
  "schedule": {
    "kind": "cron",
    "expr": "0 9 * * *",
    "tz": "Asia/Shanghai"
  },
  "payload": {
    "kind": "agentTurn",
    "message": "执行数据同步任务。\n\n重要:\n- 如果某步骤失败,记录错误但继续执行后续步骤\n- 最终输出执行报告:成功N项,失败N项\n- 失败项附上错误原因和建议重试方式",
    "timeoutSeconds": 600
  },
  "delivery": {
    "mode": "announce"
  },
  // OpenClaw 内置重试配置
  "retry": {
    "maxAttempts": 3,        // 最多重试3次
    "backoffMs": 60000       // 每次重试间隔60秒
  }
}

几个错误处理的最佳实践:

  • 在 prompt 中写明错误处理逻辑:告诉Agent遇到错误该怎么做,而不是让它自己决定
  • 区分"可重试"和"不可重试"错误:网络超时可以重试,配置错误重试也没用
  • 设置合理的超时时间:太短容易误杀,太长浪费资源
  • 记录执行日志:每次执行的结果都应该记录,方便排查问题

更多自动化工作流的构建技巧,可以参考 自动化工作流完全指南

Cron 表达式速查表

Cron 表达式强大但容易忘,这里整理了最常用的模式:

# Cron 表达式格式:分 时 日 月 周
# *    任意值
# ,    列表(如 1,3,5)
# -    范围(如 1-5)
# /    步长(如 */5 表示每5个单位)

# 常用表达式速查
0 9 * * *           # 每天早上9点
0 9 * * 1-5         # 工作日早上9点
0 */2 * * *         # 每2小时
*/15 * * * *        # 每15分钟
0 9,18 * * *        # 每天9点和18点
0 9 * * 1           # 每周一早上9点
0 9 1 * *           # 每月1号早上9点
0 9 * 1,4,7,10 1    # 每季度第一个周一早上9点
0 0 * * 0           # 每周日凌晨(适合周报)
30 8 * * 1-5        # 工作日早上8:30

一个常见的坑:Cron 表达式的"周"字段,0和7都代表周日。建议统一用0,避免混乱。时区一定要指定,否则默认UTC时间,差8个小时直接翻车。

管理你的Cron任务

任务多了之后,管理就成了问题。OpenClaw 提供了完善的 Cron 管理接口:

# 查看所有Cron任务
openclaw cron list

# 查看某个任务的详情
openclaw cron get <job-id>

# 手动触发一次(不等待下次调度)
openclaw cron run <job-id>

# 暂停任务(保留配置但不执行)
openclaw cron pause <job-id>

# 恢复暂停的任务
openclaw cron resume <job-id>

# 删除任务
openclaw cron delete <job-id>

# 查看任务执行历史
openclaw cron history <job-id>

管理建议:

  • 给每个任务取有意义的 name,别用默认的 UUID
  • 定期 review 执行历史,清理不再需要的任务
  • openclaw cron pause 代替 delete,保留配置以便恢复
  • 对于重要任务,设置告警——如果连续失败N次就通知你

想要了解更多日常自动化场景,推荐 日常工作流自动化指南

进阶:Cron + SubAgent 组合技

Cron 任务本身也可以 spawn SubAgent 来并行执行多个子任务。这个组合技在复杂场景下非常强大。

// Cron 触发一个会 spawn 多个 SubAgent 的主任务
{
  "name": "weekly-report-pipeline",
  "schedule": {
    "kind": "cron",
    "expr": "0 17 * * 5",    // 每周五下午5点
    "tz": "Asia/Shanghai"
  },
  "payload": {
    "kind": "agentTurn",
    "message": "生成本周工作周报:\n\n请依次执行以下子任务:\n1. 汇总本周的所有日报内容\n2. 统计本周完成的任务数量\n3. 整理下周计划\n4. 生成周报文档并发送到飞书",
    "timeoutSeconds": 900
  }
}

在 Agent 的 SOUL.md 或 prompt 中,可以定义当收到"生成周报"这类指令时,自动 spawn 多个 SubAgent 分别处理数据收集、内容生成、格式排版等子任务。关于 SubAgent 的详细用法,请看 SubAgent 编排模式。同时,如果任务需要跨渠道执行,可以参考 定时任务完全指南Cron自动化进阶

总结

OpenClaw Cron 是让Agent从"被动应答"升级为"主动执行"的关键能力。掌握以下要点:

  1. 选对 Schedule 类型:at 一次性,every 固定间隔,cron 复杂规则
  2. 选对 Payload 类型:systemEvent 轻量注入,agentTurn 重量执行
  3. 配置合理的 Delivery:announce 广播,webhook 外发,none 静默
  4. 写好 Prompt:任务描述越具体,Agent执行越准确
  5. 处理好错误:重试策略、超时设置、日志记录缺一不可
  6. 定期维护:review执行历史,清理无用任务

善用 Cron,你的Agent就不再是一个"等你吩咐的工具",而是一个"主动干活的同事"。

相关推荐:Cron入门 · Cron自动化 · 定时任务 · 自动化工作流 · 日常工作流