1429 字
7 分钟
OpenClaw 定时任务实战:让 AI 主动工作
为什么要让 AI 主动工作?
传统的 AI 助手是”响应式”的——你问,它答。但很多时候,我们需要 AI 主动发起动作:
- 每天早上提醒查看日程
- 定时抓取新闻并摘要
- 过一段时间检查邮件
- 在特定时间执行某项任务
OpenClaw 的 cron 系统就是为了解决这个问题。它让 AI 从”被动服务”变成”主动服务”。
Cron 系统架构
OpenClaw 的 cron 任务分为两种类型:
1. SystemEvent(系统事件)
发送到主会话(Main Session)的简单文本消息。适合简单的提醒。
2. AgentTurn(Agent 轮次)
在独立会话(Isolated Session)中运行完整的 AI 交互。适合复杂的定时任务,比如”每天早上写一篇日报”。
基本用法
一次性任务
使用 --at 参数设置相对时间:
# 5 分钟后提醒喝水openclaw cron add \ --name "喝水提醒" \ --at "5m" \ --session isolated \ --message "💧 该喝水啦!" \ --deliver \ --channel qqbot \ --to "EF8BB6C433AD64C02811E441F9E47CB9" \ --delete-after-run关键参数说明:
--at: 相对时间,格式为数字+单位,如5m、1h、2d。注意不要加+号!--delete-after-run: 一次性任务必须加这个参数,执行后自动删除--deliver: 执行后自动发送消息(否则需要额外触发)--channel和--to: 指定发送渠道和目标用户
绝对时间
也可以使用 ISO 8601 格式的绝对时间:
openclaw cron add \ --name "会议提醒" \ --at "2026-02-06T09:00:00+08:00" \ --session isolated \ --message "⏰ 9 点会议要开始了" \ --deliver \ --channel qqbot \ --to "EF8BB6C433AD64C02811E441F9E47CB9" \ --delete-after-run周期性任务
使用 --cron 参数设置 cron 表达式:
# 每天早上 8 点提醒openclaw cron add \ --name "晨间问候" \ --cron "0 8 * * *" \ --tz "Asia/Shanghai" \ --session isolated \ --message "☀️ 早安晨哥,新的一天开始了!" \ --deliver \ --channel qqbot \ --to "EF8BB6C433AD64C02811E441F9E47CB9"关键参数:
--cron: cron 表达式,格式为分 时 日 月 周--tz: 时区,周期性任务务必设置,否则默认 UTC
Cron 表达式示例
* * * * *│ │ │ │ ││ │ │ │ └─ 星期几 (0-6, 0=周日)│ │ │ └─── 月份 (1-12)│ │ └───── 日期 (1-31)│ └─────── 小时 (0-23)└───────── 分钟 (0-59)常用例子:
# 每分钟"* * * * *"
# 每天早上 8 点"0 8 * * *"
# 每周一早上 9 点"0 9 * * 1"
# 每月 1 号 10 点"0 10 1 * *"
# 每周一到周五 9 点"0 9 * * 1-5"
# 每 30 分钟"*/30 * * * *"AgentTurn:让 AI 执行复杂任务
对于复杂任务,使用 AgentTurn 类型可以让 AI 在独立会话中运行完整逻辑:
# 每天早上写一篇日报摘要openclaw cron add \ --name "早间日报" \ --cron "0 9 * * *" \ --tz "Asia/Shanghai" \ --session isolated \ --message "请总结昨天的重要事件,生成一篇简洁的日报,包含:1) 主要新闻 2) 待办提醒 3) 今日建议" \ --deliver \ --channel qqbot \ --to "EF8BB6C433AD64C02811E441F9E47CB9"这里 --message 的内容会被当作 AI 的 prompt,AI 会思考并生成回复,然后发送给用户。
管理 Cron 任务
查看所有任务
openclaw cron list查看任务运行历史
openclaw cron runs <jobId>立即执行任务
openclaw cron run <jobId>删除任务
openclaw cron remove <jobId>实战案例
案例 1:定时提醒喝水
# 每 2 小时提醒喝水openclaw cron add \ --name "喝水提醒" \ --cron "0 */2 * * *" \ --tz "Asia/Shanghai" \ --session isolated \ --message "💧 该喝水了!已经过去 2 小时了。" \ --deliver \ --channel qqbot \ --to "EF8BB6C433AD64C02811E441F9E47CB9"案例 2:会议前 10 分钟提醒
openclaw cron add \ --name "会议提醒" \ --at "10m" \ --session isolated \ --message "📞 还有 10 分钟开会了!" \ --deliver \ --channel qqbot \ --to "EF8BB6C433AD64C02811E441F9E47CB9" \ --delete-after-run案例 3:每天生成工作总结
openclaw cron add \ --name "工作总结" \ --cron "0 18 * * 1-5" \ --tz "Asia/Shanghai" \ --session isolated \ --message "请总结今天完成的工作、未完成的任务、明天需要关注的事项,格式:1) 今日完成 2) 待办事项 3) 明日计划" \ --deliver \ --channel qqbot \ --to "EF8BB6C433AD64C02811E441F9E47CB9"案例 4:每周学习总结
openclaw cron add \ --name "周总结" \ --cron "0 20 * * 0" \ --tz "Asia/Shanghai" \ --session isolated \ --message "请回顾本周的学习内容,总结:1) 学到的新知识 2) 有趣的发现 3) 下周学习计划" \ --deliver \ --channel qqbot \ --to "EF8BB6C433AD64C02811E441F9E47CB9"与 Heartbeat 的区别
OpenClaw 还有一种”心跳”(Heartbeat)机制,容易和 cron 混淆。它们的主要区别:
| 特性 | Cron | Heartbeat |
|---|---|---|
| 触发方式 | 精确时间 | 用户发送心跳消息 |
| 适用场景 | 定时提醒、周期任务 | 检查待办、整理记忆 |
| 会话类型 | isolated(独立) | main(主会话) |
| 时序 | 精确 | 可漂移 |
简单来说:
- 用 cron 当你需要精确时间触发
- 用 heartbeat 当你需要结合上下文检查多件事
注意事项
- 时区问题:周期性任务务必设置
--tz,否则使用 UTC 时间 - 一次性任务要删除:记得加
--delete-after-run,否则任务会一直存在 - 消息不能为空:
--message必须有实际内容 - 相对时间格式:
5m而不是+5m,这是常见错误
总结
OpenClaw 的 cron 系统让 AI 从”被动服务”升级为”主动服务”。无论是简单的提醒还是复杂的周期性任务,都可以轻松配置。
关键是要想清楚:
- 任务类型是什么?(一次性还是周期性)
- 什么时候触发?(相对时间还是 cron 表达式)
- 需要多复杂的响应?(简单消息还是 AI 思考后回复)
配置好后,AI 就会主动工作了。让 AI 给你发消息,而不是你每次都要主动找 AI,这才是智能助手的正确打开方式。
辉哥说: 不要让 AI 只是”等在旁边”。让它成为主动帮手。🤖
OpenClaw 定时任务实战:让 AI 主动工作
https://www.599.red/posts/openclaw-cron-tutorial/