⏰ OpenClaw定时任务Cron完全指南

让AI Agent像瑞士钟表一样精准运行

世界上有一种坚持叫"每天凌晨4点",它不属于人类,属于AI。 当你还在梦乡,你的Agent已经完成了数据采集、内容生成、报告发送——这就是Cron的魔法。

🕐 Cron表达式速查

Cron表达式由5-6个字段组成:

# 标准格式
* * * * * *
│ │ │ │ │ │
│ │ │ │ │ └── 星期 (0-7, 0和7都是周日)
│ │ │ │ └──── 月份 (1-12)
│ │ │ └────── 日期 (1-31)
│ │ └──────── 小时 (0-23)
│ └────────── 分钟 (0-59)
└──────────── 秒 (可选, 0-59)

# 特殊字符
*   - 任意值
,   - 列表,如 1,3,5
-   - 范围,如 1-5
/   - 步进,如 */5 每5分钟
L   - 最后 (日期/星期)
W   - 最近工作日

常用表达式

场景Cron表达式说明
每5分钟*/5 * * * *高频监控
每小时0 * * * *小时级任务
每天早上8点0 8 * * *日报推送
工作日早9点0 9 * * 1-5工作提醒
每周一早上0 9 * * 1周报生成
每月1号0 0 1 * *月报统计
最后工作日0 18 LW * *月末总结

📋 Job配置详解

{
  "name": "daily-report",              // 任务名称,唯一标识
  "description": "每日运营报告生成",    // 描述
  
  // ========== 调度配置 ==========
  "schedule": {
    "kind": "cron",                    // 类型: cron | at | every
    "expr": "0 8 * * *",              // cron表达式
    "tz": "Asia/Shanghai"             // 时区,默认UTC
  },
  
  // ========== 执行负载 ==========
  "payload": {
    "kind": "agentTurn",               // agentTurn | systemEvent
    "message": "执行每日报告任务...",   // 给Agent的指令
    "model": "claude-3-5-sonnet",     // 模型覆盖
    "timeoutSeconds": 300,            // 超时时间,0表示不超时
    "thinking": "on"                  // 推理模式
  },
  
  // ========== Session目标 ==========
  "sessionTarget": "isolated",         // main | isolated | current | session:xxx
  
  // ========== 结果投递 ==========
  "delivery": {
    "mode": "announce",               // none | announce | webhook
    "channel": "discord",             // 投递渠道
    "to": "channel_id"                // 具体目标
  },
  
  // ========== 失败处理 ==========
  "failureAlert": {
    "mode": "announce",               // 告警方式
    "channel": "ops-alerts",
    "after": 3,                       // 连续失败几次后告警
    "cooldownMs": 3600000             // 告警冷却时间
  },
  
  "enabled": true                      // 是否启用
}

🎯 SessionTarget详解

类型说明适用场景
main主会话,系统事件轻量级通知、状态更新
isolated独立隔离会话独立任务,默认推荐
current当前创建时的会话绑定创建上下文
session:xxx指定持久化会话项目专属会话

💡 选择建议

  • isolated:大多数场景,任务隔离安全
  • main:仅systemEvent可用,轻量通知
  • session:project:长期项目,保持对话连续性

🚀 实战配置示例

📰 每日新闻聚合

{
  "name": "daily-ai-news",
  "schedule": { "kind": "cron", "expr": "0 8 * * *", "tz": "Asia/Shanghai" },
  "payload": {
    "kind": "agentTurn",
    "message": "抓取AI新闻RSS,生成摘要,发送到Discord"
  },
  "sessionTarget": "isolated",
  "delivery": { "mode": "announce", "channel": "discord" }
}

🔍 竞品监控(每小时)

{
  "name": "competitor-watch",
  "schedule": { "kind": "cron", "expr": "0 * * * *" },
  "payload": {
    "kind": "agentTurn",
    "message": "检查竞品网站更新,如有变化记录到memory",
    "timeoutSeconds": 120
  },
  "sessionTarget": "isolated",
  "delivery": { "mode": "none" },  // 静默执行
  "failureAlert": {
    "after": 3,
    "channel": "alerts"
  }
}

📊 每周报告(周一早)

{
  "name": "weekly-marketing-report",
  "schedule": { "kind": "cron", "expr": "0 9 * * 1", "tz": "Asia/Shanghai" },
  "payload": {
    "kind": "agentTurn",
    "message": "汇总上周数据:网站流量、SEO收录、社区互动"
  },
  "sessionTarget": "isolated",
  "delivery": { "mode": "announce" }
}

🔔 一次提醒(10分钟后)

{
  "name": "reminder-10min",
  "schedule": { "kind": "at", "at": "2026-04-16T01:10:00+08:00" },
  "payload": {
    "kind": "systemEvent",
    "text": "⏰ 10分钟到了,该检查任务状态了"
  },
  "sessionTarget": "main",
  "deleteAfterRun": true
}

⚡ 高频轮询(每5分钟)

{
  "name": "high-frequency-check",
  "schedule": { "kind": "every", "everyMs": 300000 },
  "payload": {
    "kind": "agentTurn",
    "message": "检查队列积压情况"
  },
  "sessionTarget": "isolated",
  "delivery": { "mode": "none" }
}

🛠️ CLI操作

# 列出所有任务
openclaw cron list

# 查看任务详情
openclaw cron get --id daily-ai-news

# 手动触发任务
openclaw cron run --id daily-ai-news

# 查看任务执行历史
openclaw cron runs --id daily-ai-news --limit 10

# 更新任务
openclaw cron update --id daily-ai-news --patch '{"enabled": false}'

# 删除任务
openclaw cron remove --id daily-ai-news

# 唤醒Scheduler(立即检查)
openclaw cron wake

⚠️ 高级配置与坑点

Webhook投递

{
  "delivery": {
    "mode": "webhook",
    "to": "https://your-server.com/webhook",
    "bestEffort": true  // 失败不重试
  }
}

失败转移

{
  "failureAlert": {
    "mode": "webhook",
    "to": "https://backup-server.com/alert",
    "failureDestination": {
      "mode": "announce",
      "channel": "emergency"
    }
  }
}
⚠️ 常见坑点
  • 时区错误:Cron按UTC解析,务必设置tz字段
  • sessionTarget=main时必须用systemEvent
  • timeoutSeconds=0表示永不超时,谨慎使用
  • 高频任务(<5分钟)可能堆积,检查队列深度
  • deleteAfterRun=true的任务执行后不可恢复
🎓 调试技巧