⏰ Cron定时任务详解

让AI Agent变成"准时打卡的打工人"——自动化重复任务

任务调度 自动化 定时提醒

📖 什么是Cron定时任务?

Cron是Unix/Linux系统中经典的定时任务调度器,名字来源于希腊语"Chronos"(时间)。它让你可以设定"什么时候执行什么任务",就像给AI Agent设置了一个永不疲倦的闹钟。

"凌晨4点17分,当全世界都在沉睡,我的Agent准时醒来,开始检查网站的健康状况。它从不赖床,也从不抱怨..."

为什么AI Agent需要Cron?

📊 定时报告

每天早上8点自动生成数据报告,发给团队

🔍 定时监控

每5分钟检查一次网站状态,发现问题立即报警

📰 内容聚合

每小时抓取RSS源,更新新闻资讯

💾 定时备份

每天凌晨3点自动备份数据库

⚙️ Cron表达式语法

Cron格式:分 时 日 月 周

# ┌───────────── 分钟 (0 - 59) # │ ┌───────────── 小时 (0 - 23) # │ │ ┌───────────── 日期 (1 - 31) # │ │ │ ┌───────────── 月份 (1 - 12) # │ │ │ │ ┌───────────── 星期 (0 - 6, 0=周日) # │ │ │ │ │ # * * * * * 要执行的命令

常用Cron表达式速查

表达式含义
* * * * *每分钟
0 * * * *每小时整点
0 */6 * * *每6小时
0 0 * * *每天午夜
0 8 * * *每天早上8点
0 0 * * 0每周日午夜
0 0 1 * *每月1号午夜
*/5 * * * *每5分钟
0 9 * * 1-5工作日9点
0 0 1 1 *每年1月1日

特殊符号

符号含义示例
*任意值每小时
,列表0 8,12,18 * * * (8点、12点、18点)
-范围0 9-17 * * 1-5 (工作日9-17点)
/步进*/10 * * * * (每10分钟)

🔧 OpenClaw中的Cron实战

💡 妙趣Tips:OpenClaw内置cron工具,可以直接创建和管理定时任务,还支持系统事件和Agent Turn两种模式!

OpenClaw Cron工具概览

// OpenClaw cron工具的核心功能 { "action": "add", // 创建定时任务 "action": "list", // 列出所有任务 "action": "remove", // 删除任务 "action": "run", // 立即执行 "action": "wake" // 发送唤醒事件 }

场景1:创建每日早报任务

// 每天早上8点生成AI新闻日报 await cron({ action: "add", job: { name: "daily-ai-news", schedule: { kind: "cron", expr: "0 8 * * *", tz: "Asia/Shanghai" }, payload: { kind: "agentTurn", message: "生成今天的AI新闻日报,搜索最新AI动态并保存到/var/www/miaoquai/news/目录", timeoutSeconds: 300 }, delivery: { mode: "announce", to: "#daily-reports" } } });

场景2:定时健康检查

// 每5分钟检查网站健康状态 await cron({ action: "add", job: { name: "health-check", schedule: { kind: "every", everyMs: 300000 }, // 5分钟 payload: { kind: "systemEvent", text: "执行健康检查:检查网站可访问性、API响应时间、磁盘空间" } } });

场景3:一次性定时提醒

// 30分钟后提醒开会 await cron({ action: "add", job: { name: "meeting-reminder", schedule: { kind: "at", at: "2026-04-08T10:30:00+08:00" }, payload: { kind: "systemEvent", text: "⏰ 提醒:15分钟后有产品评审会议" }, deleteAfterRun: true // 执行后自动删除 } });

场景4:复杂的RSS内容聚合

// 每小时执行RSS聚合任务 await cron({ action: "add", job: { name: "rss-aggregator", description: "每小时聚合RSS内容并更新网站", schedule: { kind: "cron", expr: "0 * * * *", tz: "Asia/Shanghai" }, sessionTarget: "isolated", payload: { kind: "agentTurn", message: `执行RSS内容聚合任务: 1. 订阅OpenClaw Blog、GitHub Discussions等RSS源 2. 提取最新文章和讨论 3. 生成摘要页面保存到/var/www/miaoquai/rss/ 4. 更新网站玩法资讯栏目`, timeoutSeconds: 600 }, failureAlert: { mode: "announce", after: 3, cooldownMs: 3600000 } } });

场景5:管理定时任务

// 列出所有定时任务 const jobs = await cron({ action: "list" }); console.log(jobs); // 查看所有任务状态 // 立即执行某个任务(测试用) await cron({ action: "run", jobId: "daily-ai-news" }); // 删除不再需要任务 await cron({ action: "remove", jobId: "old-task-id" }); // 查看任务执行历史 const history = await cron({ action: "runs", jobId: "daily-ai-news" });

✅ Cron最佳实践

🎯 设计原则

🚨 避坑指南

解决方案
任务执行超时设置合理的timeoutSeconds,或拆分为小任务
任务堆积设置任务执行间隔 > 平均执行时间
时区混乱明确指定tz参数,如"Asia/Shanghai"
重复执行确保任务逻辑幂等,或使用去重机制
系统重启检查持久化配置,任务是否在重启后恢复

📊 推荐任务间隔

任务类型推荐间隔说明
健康检查1-5分钟太频繁会增加负载
数据同步5-15分钟根据数据时效性调整
内容聚合1-6小时平衡实时性和资源消耗
日报生成每天1次选择业务低谷时段
数据备份每天1次通常放在凌晨执行

🔗 相关教程