Content
Unix 系统中的定时任务调度器。用一行 cron 表达式(如 0 9 * * * 表示每天早上 9 点)定义任务的执行时间。在 OpenClaw 中用来触发瑶瑶的定期任务,比如早报推送、记忆整理等。
Acceptance
Question
- cron 表达式的
*/5和0,5,10,...有什么区别?在跨午夜时行为是否一致? - OpenClaw 的 cron 和系统 crontab 的关系是什么?它是在 crontab 之上的抽象层吗?
- dependsOn 的依赖检查是轮询还是事件驱动?如果上游任务失败了下游会怎样?
See Also
OpenClaw
Session
HEARTBEATS
幂等性
Reference
- cron 维基百科:https://en.wikipedia.org/wiki/Cron
- 来源:2026-03-20 Ghost-in-the-Shell cron 系统改造(briefing 流水线、defaults 机制、session 问题排查)
Answer
Q: */5 和 0,5,10,... 的区别?
功能上等价,都是每 5 分钟执行一次。*/5 是语法糖,展开后就是 0,5,10,15,20,25,30,35,40,45,50,55。跨午夜行为一致——cron 不关心”连续性”,它只在每分钟检查当前时间是否匹配表达式。
Q: OpenClaw cron vs 系统 crontab?
完全独立。OpenClaw cron 是应用层调度器,运行在 OpenClaw node 进程内,不依赖系统 crontab。它用自己的 cron 表达式解析器,支持 --message/--system-event 等 AI 专属 payload,以及 dependsOn 依赖链——这些系统 crontab 做不到。
Q: dependsOn 是轮询还是事件驱动?上游失败怎么办?
OpenClaw 内部是事件驱动——上游任务完成后触发下游检查。上游失败时下游不会被触发,会一直等待。没有自动超时跳过机制,需要手动 openclaw cron run 触发或等下一个调度周期。
Extra
Cron 表达式速查
五段式:分 时 日 月 周
| 字段 | 范围 | 示例 |
|---|---|---|
| 分钟 | 0-59 | 30 = 第 30 分钟 |
| 小时 | 0-23 | 8 = 早上 8 点 |
| 日 | 1-31 | 1 = 每月 1 号 |
| 月 | 1-12 | * = 每月 |
| 周几 | 0-7 | 1 = 周一(0 和 7 都是周日) |
常用模式:
0 8 * * *— 每天 08:000 9,13,17,21 * * *— 每天 9/13/17/21 点30 3 * * 1— 每周一 03:300 4 1 * *— 每月 1 号 04:00
OpenClaw Cron 特有概念
Payload 类型
- agentTurn(
--message):isolated session 专用,agent 收到消息后执行,输出通过--announce投递 - systemEvent(
--system-event):main session 专用,注入系统事件。v2026.3.13 中不触发 agent 处理
dependsOn 依赖链
任务可以声明依赖:"dependsOn": ["morning-collect"],被依赖的任务完成后才执行。用于构建流水线(采集 → 生成 → 推送)。
per-job 覆盖
每个任务可以覆盖默认 model 和 timeout:"model": "anthropic/claude-opus-4-6", "timeoutSeconds": 600。仅 isolated 模式支持。
defaults 配置
schedules.json 支持顶层 defaults 块,job 未指定的字段自动继承:
{ "defaults": { "model": "anthropic/claude-opus-4-6", "session": "isolated" }, "jobs": [...] }