定时任务
OpenClaw 提供两种主动触发机制:Heartbeat(心跳)和 Cron(定时任务)。本章介绍如何配置和使用这两种机制实现自动化工作流。
为什么需要定时任务?
大多数人用 AI 的方式是被动模式:你提问 → AI 回答 → 结束。AI 坐在那里等你发话,你不问它就什么都不做。
但真正的贴身助理不是这样工作的。一个好的助理会:
- 早上 8 点提醒你今天的日程
- 发现有未读重要邮件时主动告诉你
- 在你开会前 15 分钟发一条提醒
- 每周五自动整理本周工作摘要
这就是主动模式,也是 OpenClaw 定时任务的核心价值。
Heartbeat vs Cron
核心区别
| 维度 | Heartbeat | Cron |
|---|---|---|
| 触发方式 | 状态/事件驱动 | 精确时间驱动 |
| 执行逻辑 | 有判断才执行 | 到点必执行 |
| 适用场景 | 监控、检查、保活 | 定时报表、提醒 |
| 灵活性 | 高(可写条件判断) | 低(固定时间) |
| 配置文件 | HEARTBEAT.md | openclaw.json |
一句话总结:
- Cron 是闹钟:到点就响,不管有没有事,必须执行指定动作
- Heartbeat 是巡逻保安:每隔一段时间出来转转,看看有没有"需要处理的事",没大事就回去,有大事才干活
选择指南
用 Cron 的场景:
- 固定时间、强制执行、无需判断
- 日报/周报推送:每天早上 9:00 必须发一份昨日总结
- 定时备份:每天凌晨 3:00 必须备份数据库
- 会议提醒:每周一下午 2:00 提醒开会
用 Heartbeat 的场景:
- 状态监控、按需处理、保活、智能判断
- 服务保活:检查 AI 进程是否挂掉,挂了自动重启
- 异常监控:每 30 分钟检查一次服务器负载,只有当 CPU > 90% 时才发报警
- 待办处理:每 15 分钟检查一次"待办文件夹",有新文件才处理
Cron 定时任务
配置方式
编辑配置文件:
openclaw config edit
添加 cron 配置:
{
"cron": {
"enabled": true,
"tasks": [
{
"name": "daily-report",
"schedule": "0 9 * * *",
"prompt": "生成昨日工作总结并发送到我的邮箱",
"enabled": true
},
{
"name": "weekly-review",
"schedule": "0 18 * * 5",
"prompt": "生成本周工作回顾",
"enabled": true
}
]
}
}
Cron 表达式
Cron 表达式格式:分 时 日 月 周
| 字段 | 允许值 | 特殊字符 |
|---|---|---|
| 分钟 | 0-59 | * , - / |
| 小时 | 0-23 | * , - / |
| 日 | 1-31 | * , - / |
| 月 | 1-12 | * , - / |
| 周 | 0-6(0=周日) | * , - / |
常用示例:
| 表达式 | 含义 |
|---|---|
0 9 * * * | 每天早上 9:00 |
0 18 * * 5 | 每周五下午 18:00 |
*/30 * * * * | 每 30 分钟 |
0 0 * * 0 | 每周日午夜 |
0 9 1 * * | 每月 1 号早上 9:00 |
管理命令
# 查看所有定时任务
openclaw cron list
# 添加定时任务
openclaw cron add daily-report "0 9 * * *" "生成昨日工作总结"
# 启用/禁用任务
openclaw cron enable daily-report
openclaw cron disable daily-report
# 删除定时任务
openclaw cron remove daily-report
# 手动执行任务
openclaw cron run daily-report
# 查看任务执行历史
openclaw cron history daily-report
高级配置
{
"cron": {
"tasks": [
{
"name": "smart-report",
"schedule": "0 9 * * 1-5",
"prompt": "生成昨日工作总结",
"enabled": true,
"timezone": "Asia/Shanghai",
"retry": {
"maxAttempts": 3,
"interval": 300000
},
"notification": {
"channels": ["telegram", "email"],
"onSuccess": true,
"onFailure": true
}
}
]
}
}
Heartbeat 心跳
配置方式
编辑 HEARTBEAT.md 文件:
openclaw heartbeat edit
写入需要定期检查的内容:
# Heartbeat 任务
## 定期检查(每 30 分钟)
- 检查未读邮件,有重要的就通知我
- 看看今天还有没有未完成的日程
- 如果距离下一个会议 < 30 分钟,提醒我
## 条件触发
- 当 CPU 使用率 > 90% 时,发送警告
- 当磁盘空间 < 10GB 时,提醒清理
- 当有新的 GitHub PR 时,通知我
## 自动化任务
- 每天下班前整理今日工作总结
- 每周五生成本周回顾
工作原理
- Heartbeat 调度器每隔一段时间(默认 30 分钟)触发一次
- Agent 读取 HEARTBEAT.md 文件
- 按清单逐项执行检查
- 只有满足条件时才执行相应操作
- 记录执行结果
配置参数
# 设置心跳间隔(分钟)
openclaw config set heartbeat.interval 30
# 启用/禁用心跳
openclaw config set heartbeat.enabled true
# 设置心跳超时时间(秒)
openclaw config set heartbeat.timeout 300
管理命令
# 查看心跳状态
openclaw heartbeat status
# 编辑心跳任务
openclaw heartbeat edit
# 手动触发心跳检查
openclaw heartbeat trigger
# 查看心跳执行日志
openclaw heartbeat logs
# 查看上次心跳结果
openclaw heartbeat last
实战案例
案例 1:每日工作总结
需求:每天下午 6 点自动生成工作总结并发送到邮箱。
Cron 配置:
{
"cron": {
"tasks": [
{
"name": "daily-summary",
"schedule": "0 18 * * 1-5",
"prompt": "请根据今天的日程、邮件、文件修改记录,生成一份工作总结,包括:1. 完成的任务 2. 进行中的工作 3. 明天的计划。生成后发送到我的邮箱。"
}
]
}
}
案例 2:服务器监控
需求:每 30 分钟检查服务器状态,异常时报警。
Heartbeat 配置:
# 服务器监控
## 每 30 分钟检查
- 检查 CPU 使用率,如果 > 90%,发送警告到 Telegram
- 检查内存使用率,如果 > 85%,发送警告
- 检查磁盘空间,如果 < 10GB,提醒清理
- 检查关键服务是否运行,如果停止则尝试重启
## 报警规则
- CPU > 90%:立即报警
- 内存 > 85%:立即报警
- 磁盘 < 10GB:每天提醒一次
- 服务停止:尝试重启,失败后报警
案例 3:邮件监控
需求:定期检查邮箱,有重要邮件时通知。
Heartbeat 配置:
# 邮件监控
## 每 15 分钟检查
- 检查收件箱未读邮件
- 如果有来自以下发件人的邮件,立即通知:
- [email protected]
- [email protected]
- 如果邮件标题包含"紧急"、"重要"、"ASAP",立即通知
- 其他邮件每小时汇总一次通知
## 通知格式
发件人:{{sender}}
主题:{{subject}}
摘要:{{summary}}
案例 4:自动化内容发布
需求:每周一早上 8 点自动发布本周内容计划。
Cron + Memory 配置:
{
"cron": {
"tasks": [
{
"name": "weekly-content-plan",
"schedule": "0 8 * * 1",
"prompt": "根据 MEMORY.md 中的内容主题和发布计划,生成本周的内容发布计划,包括:1. 每天要发布的主题 2. 内容大纲 3. 发布平台"
}
]
}
}
案例 5:多任务编排
需求:复杂的自动化工作流。
配置:
# 自动化工作流
## 早上 8:00(Cron)
- 读取今日日程
- 汇总昨夜收到的邮件
- 生成今日工作计划
## 每 30 分钟(Heartbeat)
- 检查是否有即将开始的会议(提前 15 分钟提醒)
- 检查是否有紧急邮件
- 检查服务器状态
## 下午 6:00(Cron)
- 生成今日工作总结
- 整理明日待办
- 发送日报
## 每周五下午 5:00(Cron)
- 生成本周回顾
- 整理下周计划
- 发送周报
最佳实践
任务拆分
将大任务拆分成小任务,每个任务只做一件事:
// 不推荐
{
"prompt": "检查服务器状态、发送邮件、生成报表、备份数据"
}
// 推荐
{
"tasks": [
{ "name": "check-server", "prompt": "检查服务器状态" },
{ "name": "send-email", "prompt": "发送邮件" },
{ "name": "generate-report", "prompt": "生成报表" },
{ "name": "backup-data", "prompt": "备份数据" }
]
}
错误处理
配置重试和通知:
{
"retry": {
"maxAttempts": 3,
"interval": 300000
},
"notification": {
"onFailure": true
}
}
时区设置
确保时区正确:
{
"timezone": "Asia/Shanghai"
}
日志记录
定期查看执行日志:
# 查看最近的执行记录
openclaw cron logs --recent 10
# 查看特定任务的执行记录
openclaw cron history daily-report
常见问题
任务没有执行
检查清单:
- 任务是否启用:
openclaw cron list - 服务是否运行:
openclaw gateway status - 时区是否正确:
openclaw config show timezone - 查看错误日志:
openclaw cron logs
任务执行超时
解决:
# 增加超时时间
openclaw config set cron.timeout 600
# 或在任务中设置
{
"timeout": 600
}
Heartbeat 没有触发
检查:
# 查看心跳状态
openclaw heartbeat status
# 查看配置
openclaw config show heartbeat
# 手动触发测试
openclaw heartbeat trigger
下一步
- 渠道接入 - 配置通知渠道
- 多 Agent 协作 - 多 Agent 协作执行任务
- 最佳实践 - 生产环境配置建议