OpenClaw Cron 高级模式 - 定时任务的十八般武艺
你的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从"被动应答"升级为"主动执行"的关键能力。掌握以下要点:
- 选对 Schedule 类型:at 一次性,every 固定间隔,cron 复杂规则
- 选对 Payload 类型:systemEvent 轻量注入,agentTurn 重量执行
- 配置合理的 Delivery:announce 广播,webhook 外发,none 静默
- 写好 Prompt:任务描述越具体,Agent执行越准确
- 处理好错误:重试策略、超时设置、日志记录缺一不可
- 定期维护:review执行历史,清理无用任务
善用 Cron,你的Agent就不再是一个"等你吩咐的工具",而是一个"主动干活的同事"。