技术实现细节
OpenClaw Cron 任务类型
// 正确示例:systemEvent(用于 main session)
{
"schedule": {
"kind": "cron",
"expr": "0 9 * * *",
"tz": "Asia/Shanghai"
},
"payload": {
"kind": "systemEvent",
"text": "执行每日新闻简报任务..."
},
"sessionTarget": "main"
}
// 正确示例:agentTurn(用于 isolated session)
{
"schedule": {
"kind": "cron",
"expr": "0 */6 * * *",
"tz": "Asia/Shanghai"
},
"payload": {
"kind": "agentTurn",
"message": "检查系统状态并报告...",
"model": "minimax/MiniMax-M2.1"
},
"sessionTarget": "isolated"
}
关键约束
| 约束 |
说明 |
sessionTarget="main" |
只能用 systemEvent |
sessionTarget="isolated" |
只能用 agentTurn |
| 时区必须指定 |
默认UTC,建议用 Asia/Shanghai |
| 避免复杂 payload |
isolated session 有 tool schema bug |
常见错误模式
错误1:口头确认,实际未写入
用户:每天9点提醒我喝水
Agent:好的,我会每天9点提醒你喝水
[实际上什么都没写]
错误2:写入但格式错误
Agent:已创建任务
[实际写入的是无效JSON,gateway重启后丢失]
错误3:时区错误
Agent:设置为每天9点
[实际用UTC时区,北京时间17点才执行]
错误4:sessionTarget 不匹配
Agent:使用 agentTurn + main session
[结果:报错,任务不执行]
验证命令
列出所有 Cron 任务
openclaw cron list
查看特定任务详情
openclaw cron runs --jobId <job-id>
手动触发测试
openclaw cron run --jobId <job-id>
实战模板
用户请求模板
请帮我创建一个定时任务:
- 任务:每天发送系统状态报告到 Slack
- 时间:每天早上 8:00(北京时间)
- 要求:
1. 必须写到 Cron 里
2. 告诉我任务ID
3. 确认下次执行时间
4. 提供验证命令
Agent 回复模板
Cron 任务已创建
- 任务ID: `status-report-daily`
- 调度: `0 8 * * * Asia/Shanghai`
- 下次执行: 明天 08:00 CST
- 验证命令: `openclaw cron list | grep status-report`
任务已写入 gateway 配置,重启后仍然有效。
总结
| 原则 |
说明 |
| 明确说"写到Cron里" |
关键词触发实际写入动作 |
| 要求确认 |
任务ID + 调度 + 下次执行时间 |
| 事后验证 |
用 cron list 确认任务存在 |
| 不信任口头确认 |
只看系统里的实际配置 |
核心认知:模型的"理解"不等于"执行"。Cron 防幻觉的本质是强制确认机制。