⏰ OpenClaw Cron 定时任务教程

自动化任务调度完全指南 — 让你的AI Agent 7×24小时工作

什么是 OpenClaw Cron?

OpenClaw 的 Cron 系统是一个内置的任务调度器,允许你设置定时任务让 AI Agent 自动执行。它支持 cron 表达式、一次性定时、周期性间隔等多种调度方式,是实现自动化运营的核心能力。

Cron vs 传统 crontab

特性OpenClaw Cron传统 crontab
执行者AI Agent(智能理解任务)Shell 脚本(机械执行)
任务描述自然语言Shell 命令
错误处理Agent 自主判断和重试需要脚本编写错误处理
通知自动推送到聊天频道需要额外配置
上下文支持上下文传递无状态

核心概念

调度类型(Schedule Kind)

类型说明使用场景
at一次性定时执行提醒、延迟任务
every固定间隔重复轮询、监控
cronCron 表达式定时报告、定期任务

负载类型(Payload Kind)

类型说明会话目标
systemEvent注入系统事件文本main(主会话)
agentTurn执行 Agent 对话isolated / current / session:*

基础用法:创建简单提醒

一次性提醒(使用 qqbot_remind)

// 5分钟后提醒
qqbot_remind({
  action: "add",
  content: "该喝水了!💧",
  time: "5m"
})

// 每天早上8点提醒
qqbot_remind({
  action: "add",
  content: "早上好!查看今日AI新闻日报",
  time: "0 8 * * *"
})

使用 Cron 工具创建定时任务

// 每天早上8点执行新闻日报生成
cron({
  action: "add",
  job: {
    name: "daily-ai-news",
    schedule: {
      kind: "cron",
      expr: "0 8 * * *",
      tz: "Asia/Shanghai"
    },
    payload: {
      kind: "agentTurn",
      message: "生成今日AI新闻日报,搜索最新的AI行业新闻,生成HTML页面并发布到网站。"
    },
    sessionTarget: "isolated",
    delivery: { mode: "announce" }
  }
})

Cron 表达式速查

表达式含义
0 8 * * *每天早上 8:00
0 */2 * * *每 2 小时
0 9 * * 1-5工作日早上 9:00
30 1 * * 0每周日凌晨 1:30
0 0 1 * *每月1号 00:00
*/15 * * * *每 15 分钟
0 8,12,18 * * *每天 8:00, 12:00, 18:00

实战案例

案例1:每日营销报告

cron({
  action: "add",
  job: {
    name: "daily-marketing-report",
    schedule: {
      kind: "cron",
      expr: "0 22 * * *",
      tz: "Asia/Shanghai"
    },
    payload: {
      kind: "agentTurn",
      message: "生成今日营销报告:1) 统计今日网站访问量 2) 分析热门页面 3) 汇总社区互动数据 4) 生成HTML报告"
    },
    sessionTarget: "isolated",
    delivery: { mode: "announce" }
  }
})

案例2:竞品监控(每4小时)

cron({
  action: "add",
  job: {
    name: "competitor-monitor",
    schedule: {
      kind: "cron",
      expr: "0 */4 * * *",
      tz: "Asia/Shanghai"
    },
    payload: {
      kind: "agentTurn",
      message: "监控竞品动态:检查 futuretools.io, thereisanaiforthat.com, futurepedia.io 的最新变化,发现重大更新时通知。"
    },
    sessionTarget: "isolated",
    delivery: { mode: "announce" }
  }
})

案例3:固定间隔轮询

cron({
  action: "add",
  job: {
    name: "rss-check",
    schedule: {
      kind: "every",
      everyMs: 7200000  // 每2小时(毫秒)
    },
    payload: {
      kind: "agentTurn",
      message: "检查RSS订阅源是否有新内容,发现新文章时聚合到网站。"
    },
    sessionTarget: "isolated"
  }
})

管理定时任务

查看所有任务

// 列出所有任务
cron({ action: "list" })

// 包含已禁用的任务
cron({ action: "list", includeDisabled: true })

获取任务详情

cron({
  action: "get",
  jobId: "daily-ai-news"
})

更新任务

// 修改执行时间
cron({
  action: "update",
  jobId: "daily-ai-news",
  patch: {
    schedule: {
      kind: "cron",
      expr: "0 9 * * *",  // 改为9点执行
      tz: "Asia/Shanghai"
    }
  }
})

// 禁用任务
cron({
  action: "update",
  jobId: "daily-ai-news",
  patch: { enabled: false }
})

手动触发任务

cron({
  action: "run",
  jobId: "daily-ai-news"
})

删除任务

cron({
  action: "remove",
  jobId: "daily-ai-news"
})

会话目标详解

sessionTargetpayload.kind说明
mainsystemEvent注入主会话,触发主Agent处理
isolatedagentTurn独立会话执行,不干扰主会话
currentagentTurn绑定到创建时的当前会话
session:xxxagentTurn指定特定会话执行
💡 最佳实践:大多数定时任务应使用 sessionTarget: "isolated" + payload.kind: "agentTurn",这样任务在独立会话中执行,不会干扰正在进行的对话。

错误告警配置

cron({
  action: "add",
  job: {
    name: "critical-monitor",
    schedule: { kind: "cron", expr: "*/5 * * * *" },
    payload: {
      kind: "agentTurn",
      message: "检查服务器状态..."
    },
    sessionTarget: "isolated",
    failureAlert: {
      after: 3,           // 连续失败3次后告警
      cooldownMs: 300000,  // 告警冷却5分钟
      mode: "announce"
    }
  }
})

最佳实践

⚠️ 注意事项:
  • sessionTarget: "main" 必须配合 payload.kind: "systemEvent"
  • sessionTarget: "isolated" 必须配合 payload.kind: "agentTurn"
  • Cron 表达式使用本地时区(非UTC),除非明确指定

📖 相关术语

🤖 Agent自主性🧠 记忆持久化🔄 Agent生命周期

📚 相关踩坑实录

😅 AI Agent踩坑大全😱 运维噩梦📖 更多踩坑实录