定时任务完全指南,手把手教你自动化日常工作。
目录
1. 为什么需要 Cron
你是否有以下困扰:
- ⏰ 每天早上手动检查模型训练结果
- 🔄 定时去 GitHub 看有没有新的 PR 需要 review
- 📊 每天手动跑数据报表
- 🔔 服务器挂了才发现
- 📉 定时监控模型指标异常
Cron 就是来解决这些问题的。 它帮你定时执行任务,推送结果,相当于 24 小时待命的小助手。
2. 核心概念
2.1 三个关键问题
每次创建 Cron 任务,需要回答三个问题:
| 什么时候跑? | –at / –cron / –every | 调度策略 |
| 在哪跑? | –session | main / isolated / current / session:xxx |
| 跑什么? | –system-event / –agent-turn | 具体动作 |
2.2 SessionTarget 四种模式
┌─────────────────────────────────────────────────────────────┐
│ SessionTarget 详解 │
├─────────────────────────────────────────────────────────────┤
│.main │ 主会话,有完整上下文,但会刷屏 │
├────────────────┼────────────────────────────────────────────┤
│.isolated │ 独立会话,不打扰你,结果通过 announce 推送 │
├────────────────┼────────────────────────────────────────────┤
│.current │ 创建时绑定的当前会话 │
├────────────────┼────────────────────────────────────────────┤
│.session:xxx │ 自定义命名会话,跨天记住之前发生了什么 │
└─────────────────────────────────────────────────────────────┘
通俗理解:
- main = 在微信主群里发消息,大家都能看到
- isolated = 私聊小助手,不打扰群聊,结果会单独发给你
- session:自定义名 = 有一个专门的小本本,每次跑完记一笔,下次还能翻看
2.3 Payload 两种类型
| systemEvent | 简单提醒、主会话触发 | 往主会话塞一条消息 |
| agentTurn | 复杂任务、独立执行 | 让 AI 跑一段完整任务 |
2.4 Delivery 推送方式
| announce | 跑完后推送到指定渠道 | 绝大部分场景 |
| webhook | POST 结果到指定 URL | 对接外部系统 |
| none | 跑完就拉倒,不推送 | 后台内部任务 |
3. 命令行基础
3.1 安装确认
# 先确认 OpenClaw 已安装
openclaw –version
# 查看 cron 子命令
openclaw cron –help
3.2 核心命令一览
# 添加任务
openclaw cron add [参数...]
# 列出所有任务
openclaw cron list
# 查看任务详情
openclaw cron get <job-id>
# 立即触发任务
openclaw cron run <job-id>
# 查看任务运行历史
openclaw cron runs –id <job-id>
# 删除任务
openclaw cron remove –id <job-id>
# 停止/启用任务
openclaw cron disable –id <job-id>
openclaw cron enable –id <job-id>
# 查看 cron 状态
openclaw cron status
3.3 常用参数表
| –name | -n | 任务名称,方便识别 | –name "早间报告" |
| –at | – | 一次性时间(ISO 8601) | –at "2026-03-15T10:00:00Z" |
| –cron | – | Cron 表达式 | –cron "30 9 * * 1-5" |
| –every | – | 间隔时间(毫秒) | –every 3600000 |
| –tz | – | 时区 | –tz "Asia/Shanghai" |
| –session | -s | 会话目标 | –session isolated |
| –system-event | – | 主会话消息内容 | –system-event "检查数据" |
| –agent-turn | – | 独立任务描述 | –agent-turn "分析日志…" |
| –announce | – | 启用结果推送 | –announce |
| –channel | – | 推送渠道 | –channel telegram |
| –to | – | 推送目标 | –to "channel:C123" |
| –wake | – | 唤醒模式 | –wake now |
| –stagger | – | 随机延迟范围 | –stagger 30s |
| –exact | – | 精确时间(不随机) | –exact |
| –delete-after-run | – | 跑完就删 | –delete-after-run |
4. 实战案例
案例 1:每日模型训练结果自动检查
场景:每天早上 9:30 自动检查昨天的训练日志,生成报告推送到 Telegram
Step 1: 创建任务
openclaw cron add \\
–name "每日模型训练报告" \\
–cron "30 9 * * 1-5" \\
–tz "Asia/Shanghai" \\
–session isolated \\
–agent-turn "请执行以下任务:
1. 查看 ~/logs 目录
2. 找到最新的训练日志文件(昨天日期的)
3. 提取关键指标:final_loss、final_accuracy、total_epochs、training_time
4. 检查是否有错误或警告
5. 生成一份简洁的中文报告,包含:
– 训练是否成功
– 关键指标对比前天
– 如有异常,标记为 ⚠️ 警告" \\
–announce \\
–channel telegram \\
–stagger 30s
Step 2: 验证任务创建成功
openclaw cron list
输出类似:
┌──────────────┬──────────────────────┬─────────────────┐
│ ID │ Name │ Schedule │
├──────────────┼──────────────────────┼─────────────────┤
│ abc123 │ 每日模型训练报告 │ 30 9 * * 1-5 │
└──────────────┴──────────────────────┴─────────────────┘
Step 3: 手动测试一次
# 立即运行看看效果
openclaw cron run abc123
# 查看运行结果
openclaw cron runs –id abc123
案例 2:定时服务器健康检查
场景:每小时检查服务器状态,异常时 Slack 告警
openclaw cron add \\
–name "服务器健康检查" \\
–every 3600000 \\
–session isolated \\
–agent-turn "请执行健康检查:
1. 运行 'uptime' 查看负载
2. 运行 'df -h' 查看磁盘空间
3. 运行 'free -h' 查看内存
4. 检查 GPU 可用性(nvidia-smi)
5. 如果发现以下任一情况,标记为告警:
– 磁盘使用率 > 90%
– 内存使用率 > 85%
– 负载 > 核心数 * 2
– GPU 不可用
6. 生成简洁报告,异常项前面加 🔴" \\
–delivery webhook \\
–to "https://hooks.slack.com/services/xxx/yyy/zzz" \\
–stagger 1m
案例 3:股市开盘提醒 + 自动查数据
场景:A股开盘前(9:25)推送当日市场情绪
openclaw cron add \\
–name "A股开盘提醒" \\
–cron "25 9 * * 1-5" \\
–tz "Asia/Shanghai" \\
–session isolated \\
–agent-turn "查询今日A股市场情况:
1. 获取上证指数开盘情况
2. 获取市场情绪指标(涨跌幅统计)
3. 给出简短的操盘建议(仅供娱乐)" \\
–announce \\
–channel telegram \\
–exact
案例 4:GitHub PR 自动审查提醒
场景:每天下午 4 点检查有没有需要 review 的 PR
openclaw cron add \\
–name "PR Review 提醒" \\
–cron "0 16 * * 1-5" \\
–tz "Asia/Shanghai" \\
–session main \\
–system-event "提醒小星星:检查一下待 Review 的 PR 列表,用 'gh pr list –review-requested @me –state open' 看看有哪些需要处理"
案例 5:定时任务队列监控
场景:每 10 分钟检查任务队列,积压超过阈值就告警
openclaw cron add \\
–name "任务队列监控" \\
–every 600000 \\
–session isolated \\
–agent-turn "执行以下检查:
1. 查询 Redis 任务队列长度:redis-cli llen task_queue
2. 如果队列长度 > 100,标记为告警
3. 查询最近失败任务数:redis-cli lrange failed_tasks -1 -1
4. 生成报告:
– 当前队列长度
– 过去 10 分钟新增任务数
– 失败任务数
– 结论:正常/警告/告警" \\
–announce \\
–channel telegram
案例 6:定时数据报表生成
场景:每周五下午 6 点生成周报
openclaw cron add \\
–name "周报生成" \\
–cron "0 18 * * 5" \\
–tz "Asia/Shanghai" \\
–session isolated \\
–agent-turn "请生成本周工作周报:
1. 统计代码提交:git log –since='2024-01-01' –until='2024-01-07' –oneline | wc -l
2. 统计 PR 数量:gh pr list –state merged –created '2024-01-01..2024-01-07'
3. 读取 ~/notes/weekly.md 添加本周进展
4. 生成 Markdown 格式周报,保存到 ~/reports/weekly-2024-W01.md" \\
–announce \\
–channel telegram
5. 高级用法
5.1 自定义 Session(跨天记忆)
如果希望任务能"记住"之前的结果,用自定义 session:
openclaw cron add \\
–name "每日模型指标追踪" \\
–cron "0 10 * * *" \\
–tz "Asia/Shanghai" \\
–session "session:model-tracker" \\
–agent-turn "今天模型指标:
1. 读取 ~/metrics/latest.json
2. 对比昨天的指标
3. 计算变化趋势
4. 记录到 ~/metrics/history.md" \\
–announce \\
–channel telegram
这样每次运行都会在同一个会话里,可以追问"上周趋势怎么样"。
5.2 精确时间(不随机延迟)
# 默认为了防止扎堆,会有随机延迟
# 禁用:
–exact
# 或
–stagger 0
5.3 条件执行
OpenClaw 的 cron 本身不支持复杂条件,但可以通过 prompt 实现:
–agent-turn "只有当今天是中国工作日时才执行以下任务…"
5.4 串接多个任务
通过 webhook 可以实现任务链:
任务A –(webhook)–> 任务B –(webhook)–> 任务C
6. Cron 表达式大全
6.1 基础格式
┌───────────── 分钟 (0 – 59)
│ ┌─────────── 小时 (0 – 23)
│ │ ┌───────── 日 (1 – 31)
│ │ │ ┌─────── 月 (1 – 12)
│ │ │ │ ┌───── 周 (0 – 6,0=周日)
│ │ │ │ │
* * * * *
6.2 常用表达式
| 0 9 * * * | 每天 9:00 | 早间简报 |
| 30 9 * * 1-5 | 工作日 9:30 | 上班提醒 |
| 0 */2 * * * | 每 2 小时 | 定时检查 |
| 0 0 * * * | 每天午夜 | 数据备份 |
| 0 */6 * * * | 每 6 小时 | 例行检查 |
| */15 * * * * | 每 15 分钟 | 高频监控 |
| 0 10 * * 1 | 每周一 10:00 | 周报 |
| 0 9 1 * * | 每月 1 日 9:00 | 月报 |
| 0 9 * * 0,6 | 周末 9:00 | 周末特供 |
6.3 特殊字符
| * | 任意值 | * * * * * = 每分钟 |
| , | 多个值 | 0 9 * * 1,3,5 = 周一三五 |
| – | 范围 | 0 9 * * 1-5 = 工作日 |
| / | 间隔 | */15 * * * * = 每 15 分钟 |
7. 排错指南
7.1 任务没运行?
# 1. 检查 cron 服务状态
openclaw cron status
# 2. 确认任务存在且启用
openclaw cron list
# 3. 查看最近运行记录
openclaw cron runs –id <job-id>
7.2 时间对不上?
- 默认时区是 UTC
- 中国时间要加 –tz "Asia/Shanghai"
- ISO 时间带 Z = UTC,不带 = 本地时间
# 错误示例:北京时间 9:30 但写成 UTC
–cron "30 1 * * *" # UTC 1:30 = 北京 9:30
# 正确示例
–cron "30 9 * * *" \\
–tz "Asia/Shanghai"
7.3 结果没收到?
7.4 任务跑失败了?
# 查看详细日志
openclaw cron runs –id <job-id> –verbose
8. 常见问题
Q: Cron 和 Heartbeat 有什么区别?
| 触发方式 | 精确时间 | 轮询间隔 |
| 持久化 | ✅ 持久 | ❌ 临时 |
| 复杂任务 | ✅ 支持 | ⚠️ 简单 |
| 推送方式 | 灵活 | 依赖配置 |
简单说:Cron = 定时闹钟,Heartbeat = 轮询监听。
Q: 可以创建多少个 Cron 任务?
没有硬性限制,但建议控制在 50 个以内。
Q: 任务会后台运行还是会唤醒 AI?
这取决于你用什么:
- systemEvent = 唤醒主会话的 AI
- agentTurn = 在独立会话跑 AI
Q: 如何调试刚创建的任务?
# 立即运行一次
openclaw cron run <job-id>
# 观察输出
总结
Cron 是你的免费 24 小时助手,特别适合:
- ✅ 定时检查模型训练结果
- ✅ 定时监控服务器健康
- ✅ 定时生成报表
- ✅ 定时推送提醒
- ✅ 定时数据备份
入门只需要一条命令:
openclaw cron add –name "测试" –at "2026-03-15T12:00:00Z" –session main –system-event "测试成功!"






