Cron定时任务:让AI替你守时
分类: OpenClaw实战 标签: Cron, 定时任务, 自动化, 提醒 日期: 2026-02-12 阅读时间: 4分钟
“帮我设置一个定时任务,每周五晚上9点提醒我交周报。”
这是朋友问我的问题。
我说:用Cron。
他说:Cron?那是Linux的定时任务吧,AI也能用?
我说:当然能,而且比Linux的Cron更灵活。
今天聊聊OpenClaw的Cron定时任务——让你的AI变成你的私人秘书,按你说的规矩干活。
简单说:定时任务。
你设置一个规则,比如"每天早上9点"、“每周五晚上9点”、“20分钟后”,到了时间,系统就自动执行任务,然后把结果发给你。
听起来像闹钟? 有点像,但更智能。
闹钟只能"叮铃铃"响一声,Cron可以:
- 查邮件、日历
- 写报告、分析数据
- 发消息到某个频道
- 调用其他AI工具
闹钟是被动的,Cron是主动的。
昨天朋友问我:“每周五晚上9点提醒我交周报。”
用Cron是这样设置的:
{
"name": "周报提醒",
"schedule": {
"kind": "cron",
"expr": "0 21 * * 5",
"tz": "Asia/Shanghai"
},
"payload": {
"kind": "agentTurn",
"message": "提醒我写周报,总结本周工作"
},
"sessionTarget": "main",
"enabled": true
}
解释一下:
expr: Cron表达式,“每周五晚上9点”0= 第0分钟21= 21点*= 每天每月(通配符)5= 星期五
tz: 时区,中国UTC+8用Asia/Shanghaipayload.kind:agentTurn= 让AI执行任务message: AI收到的任务描述
openclaw cron add \
--name "周报提醒" \
--schedule "cron:0 21 * * 5:Asia/Shanghai" \
--payload '{"kind":"agentTurn","message":"提醒我写周报"}'
- 打开 http://127.0.0.1:18789/
- 点击"Cron"标签
- 点击"Add Job"
- 填写表单
- 保存
打开 ~/.openclaw/cron/jobs.json,直接写JSON。
推荐: 新手用方法2(Web UI),老手用方法3(直接编辑)。
需求: 每个工作日早上9点提醒我今天的日程
{
"name": "工作日日程提醒",
"schedule": {
"kind": "cron",
"expr": "0 9 * * 1-5",
"tz": "Asia/Shanghai"
},
"payload": {
"kind": "agentTurn",
"message": "查看今天的日程,告诉我要参加的会议和截止的deadline"
},
"sessionTarget": "main",
"enabled": true
}
需求: 每隔2小时提醒喝水
{
"name": "喝水提醒",
"schedule": {
"kind": "every",
"everyMs": 7200000
},
"payload": {
"kind": "agentTurn",
"message": "提醒我喝水"
},
"sessionTarget": "main",
"enabled": true
}
注意: 这种高频任务其实更适合用heartbeat,但Cron也可以做。
需求: 20分钟后提醒我关炉子
{
"name": "关炉子提醒",
"schedule": {
"kind": "at",
"at": "2026-02-12T15:30:00Z"
},
"payload": {
"kind": "agentTurn",
"message": "提醒我关炉子,炖汤应该好了"
},
"sessionTarget": "main",
"enabled": true,
"runOnce": true
}
特点: runOnce: true,执行一次就自动禁用。
需求: 每天早上8点抓取AI新闻,生成摘要
{
"name": "AI日报",
"schedule": {
"kind": "cron",
"expr": "0 8 * * *",
"tz": "Asia/Shanghai"
},
"payload": {
"kind": "agentTurn",
"message": "抓取Hacker News和TechCrunch的AI新闻,生成日报摘要",
"model": "default",
"timeoutSeconds": 120
},
"sessionTarget": "isolated",
"enabled": true,
"delivery": {
"mode": "announce",
"channel": "telegram"
}
}
注意:
sessionTarget: "isolated"- 在独立会话中执行,不影响主会话上下文delivery.mode: "announce"- 结果直接发送到指定频道delivery.channel: "telegram"- 发送到Telegram
上一篇聊了心跳机制,现在对比一下:
| 特性 | 心跳(heartbeat) | Cron |
|---|---|---|
| 触发方式 | 系统定时发送信号 | 按时间表执行 |
| 上下文 | 依赖最近聊天记录 | 独立执行 |
| 适用场景 | 高频检查、需要上下文 | 精确时间、独立任务 |
| 灵活性 | 可灵活调整检查内容 | 严格按时间表 |
简单判断:
- 用心跳: “每隔一段时间看看有没有事”(邮件、日历、通知)
- 用Cron: “每周五晚上9点”、“每天早上8点”、“20分钟后”
{
"schedule": {
"expr": "0 9 * * *",
"tz": "UTC" // ❌ 中国用户写成UTC,实际下午5点才触发
}
}
解决: 用 tz: "Asia/Shanghai" 或你所在时区。
常见错误:
* * * * *- 每分钟执行(太频繁!)0 25 * * *- 25点不存在(应该是0-23)0 9 * * 7- 星期日应该是0,不是7(有些系统是7,有些是0)
解决: 用在线Cron生成器测试表达式。
解决: 用 openclaw cron runs <jobId> 查看执行历史。
设置了 runOnce: true,任务执行一次就停了。
解决: 定期检查 openclaw cron list --includeDisabled,看有没有意外禁用的任务。
如果任务需要更多信息,可以添加上下文:
{
"payload": {
"kind": "agentTurn",
"message": "根据最近的消息帮我总结项目进度",
"contextMessages": 10
}
}
contextMessages: 10 - 提供最近10条消息作为上下文。
{
"payload": {
"kind": "agentTurn",
"message": "分析这个复杂问题",
"thinking": "high"
}
}
thinking: "high" - 使用更深入的推理。
{
"payload": {
"kind": "agentTurn",
"message": "分析这周的数据",
"timeoutSeconds": 300
}
}
timeoutSeconds: 300 - 最长执行5分钟。
我个人的Cron任务列表(简化版):
| 任务 | 频率 | 说明 |
|---|---|---|
| AI日报生成 | 每天8:00 | 抓取新闻,生成摘要 |
| 站点检查 | 每3小时 | 检查博客死链接 |
| 周报提醒 | 每周五21:00 | 提醒写周报 |
| 健身提醒 | 周一/三/五18:00 | 提醒去健身 |
心得:
- 少即是多 - 太多任务会忘记哪个在干嘛
- 分类管理 - 工作和生活分开
- 定期清理 - 不用的任务及时删除
- 看日志 - 出错时查看执行历史
Cron这东西,看着简单,用好不简单。
刚开始你可能会设置一堆任务,然后发现:
- 有些没用过
- 有些忘记是什么
- 有些执行失败没人知道
建议: 从一两个任务开始,慢慢加。
记住:
- Cron是工具,不是炫耀技巧
- 好的Cron任务让你省心,坏的让你头疼
- 定期检查和优化,不要一劳永逸
下一步:
- 创建你的第一个Cron任务
- 用Web UI管理任务
- 查看执行历史,排查问题
- 定期清理不用的任务
相关阅读:
喜欢这篇文章?订阅"小龙虾日报",每周推送OpenClaw技巧! 链接在右上角,免费订阅~ 🦞