从"你问它答"到"它主动干活"——Cron定时任务、心跳机制、HEARTBEAT.md配置的完整指南
凌晨三点,我睡的正酣。而我的 OpenClaw,刚刚完成了今晚的第三项任务:自动抓取了 GitHub Trending 的数据,写好了一份分析报告,存到了指定目录。
这不是科幻,这是真实的"养虾"日常。
从"你问它答"到"它主动干活"
传统 AI 工具是"被动响应"模式:你打开网页,提问,它回答。你不发消息,它永远沉默。
OpenClaw 是"主动执行"模式:设好规则,到点自动干活,干完主动汇报。即使你不说,它也在后台持续工作。
| 模式 | 传统 AI | OpenClaw |
|---|---|---|
| 触发方式 | 你问它答 | 定时触发/事件触发 |
| 运行状态 | 打开网页才工作 | 24小时后台运行 |
| 交互方式 | 被动响应 | 主动推送 |
| 典型场景 | 问答、创作 | 自动化、监控 |
一位开发者的翻车经历
前几天,一位开发者信心满满地设置了 Cron 定时任务,跟同事说"明早就能收到备份报告"。
结果第二天早上——什么都没发生。
这不是 OpenClaw 坏了,而是他用错了模式。
他选了 Main 模式,依赖心跳触发。但心跳默认 30 分钟轮询一次,而且要求主会话不忙、在活跃时段内。他设置的是凌晨 2 点执行,而心跳在那个时段不会触发——消息躺在队列里,没人处理。
这个故事告诉我们:让 AI 定时干活,没那么简单。
两套调度系统:Cron vs 心跳
OpenClaw 有两套调度系统,各有用途:
Cron 定时任务:精准闹钟
Cron 就像一个精准的闹钟,让 AI 在指定时间自动执行任务。
三种调度类型:
| 类型 | 用途 | 示例 |
|---|---|---|
at |
一次性提醒 | "30分钟后提醒我开会" |
every |
固定间隔执行 | "每小时检查一次服务器" |
cron |
复杂时间表达式 | "工作日早9点发日报" |
Cron 表达式格式:秒 分 时 日 月 周
常用示例:
"30 7 * * *" // 每天7:30
"0 9 * * 1-5" // 工作日早9点
"*/30 * * * *" // 每30分钟
"0 0 * * 0" // 每周日零点
心跳机制:AI 的"巡检员"
心跳不是闹钟,而是"定期巡检"机制。默认每 30 分钟触发一次,检查是否有需要处理的任务。
关键文件:HEARTBEAT.md
这个文件决定心跳时做什么。如果文件为空或只有注释,回复 HEARTBEAT_OK,不做任何操作。如果文件有内容,就执行里面的任务。
心跳的优势:
可以批量检查多个任务 可以根据上下文决定是否执行 避免频繁 API 调用
心跳的局限:
默认 30 分钟轮询一次 需要主会话不忙 需要在活跃时段内
两种执行模式:Main vs Isolated
这是很多开发者踩坑的地方。
Main 模式(依赖心跳)
Cron 到点 → 往主会话塞消息 → 等心跳来处理
问题:心跳默认 30 分钟轮询一次,而且要求主会话不忙、在活跃时段内。如果条件不满足,消息就躺在那儿没人处理。
Isolated 模式(独立执行)
Cron 到点 → 开新会话 → 直接执行 → 干完汇报
优势:不依赖心跳,不等任何人,到点就干。
如何选择?
| 场景 | 推荐模式 | 原因 |
|---|---|---|
| 简单提醒、需要用户响应 | Main | 用户会在白天处理 |
| 复杂任务、耗时操作 | Isolated | 不阻塞主会话 |
| 需要准点执行 | Isolated | 不等心跳 |
| 依赖现有上下文 | Main | 可以访问主会话历史 |
实战配置:让龙虾夜间干活
场景:凌晨自动爬数据、写分析
步骤 1:配置 Isolated Cron 任务
在 ~/.openclaw/cron/jobs.json 中添加:
{
"name": "GitHub Trending 分析",
"enabled": true,
"schedule": {
"kind": "cron",
"expr": "0 2 * * *",
"tz": "Asia/Shanghai"
},
"payload": {
"kind": "agentTurn",
"message": "抓取 GitHub Trending 数据,分析趋势,写一份报告保存到 ~/reports/github-trending-$(date +%Y-%m-%d).md",
"thinking": "interleaved"
},
"sessionTarget": "isolated",
"delivery": {
"mode": "announce"
}
}
关键配置说明:
expr: "0 2 * * *"— 每天凌晨 2 点执行sessionTarget: "isolated"— 独立会话,不等心跳delivery.mode: "announce"— 完成后汇报
步骤 2:配置 HEARTBEAT.md(可选)
如果想用心跳机制批量检查任务:
# 心跳任务检查
## 需要检查的任务(按优先级)
### 高优先级(每次心跳都检查)
- [ ] 检查是否有待处理的 Cron 任务
- [ ] 检查服务器健康状态
### 中优先级(每天检查 2-3 次)
- [ ] 检查代码仓库更新
- [ ] 检查新闻订阅
### 低优先级(每天检查 1 次)
- [ ] 整理下载文件夹
- [ ] 清理临时文件
## 执行规则
- 每次心跳最多执行 2 个任务
- 如果主会话忙碌,只做高优先级检查
- 深夜时段(23:00-08:00)不主动打扰,除非紧急
步骤 3:调整心跳频率
在 openclaw.json 中:
{
"agents": {
"defaults": {
"heartbeat": {
"every": "10m"
}
}
}
}
默认是 30 分钟,可以根据需要调整。
真实案例:谷歌大神的 6 个 AI 团队
Shubham Saboo,谷歌高级 AI 产品经理,基于 OpenClaw 搭建了一套多智能体自动化系统,稳定运行了一个月。
他的 6 个 AI 智能体:
| 智能体 | 职责 | 运行时间 |
|---|---|---|
| Walter White | AI 动态研究 | 每天自动运行 |
| Don Draper | 推文撰写 | 定时产出 |
| Tyrion Lannister | 领英内容 | 定时产出 |
| Harvey Specter | 新闻简报 | 每日汇总 |
| Sherlock Holmes | 代码审查 | Pull Request 触发 |
| Leslie Knope | 社区事务 | 定时处理 |
关键设计:
每个智能体有独立的 SOUL.md 人设 共享文件系统替代 API 通信 双层记忆机制积累用户偏好
避坑指南:五个常见问题
问题 1:Cron 设置了但不执行
原因:用了 Main 模式,心跳在那个时段不会触发。
解决:改用 Isolated 模式,或者确保心跳在目标时段会触发。
问题 2:任务执行了但没有汇报
原因:delivery 配置缺失或设置错误。
解决:添加 "delivery": { "mode": "announce" }。
问题 3:任务重复执行
原因:Cron 表达式写错了,或者同时配置了多个触发器。
解决:检查 Cron 表达式,用 openclaw cron list 查看所有任务。
问题 4:Token 消耗爆炸
原因:任务太频繁,或者每次任务消耗大量 Token。
解决:
减少任务频率 使用更便宜的模型 设置 Token 上限
问题 5:任务执行失败但没有通知
原因:错误处理配置缺失。
解决:在任务中添加错误处理逻辑,或者设置失败通知。
最佳实践总结
1. 选择正确的执行模式
| 任务类型 | 推荐模式 |
|---|---|
| 凌晨自动备份 | Isolated |
| 工作日早提醒 | Main |
| 复杂数据爬取 | Isolated |
| 需要用户确认的任务 | Main |
2. 合理设置心跳频率
高频(5-10 分钟):需要及时响应的场景 中频(30 分钟):默认设置,适合大多数场景 低频(1-2 小时):低优先级检查
3. 善用 HEARTBEAT.md
按优先级组织任务 设置执行上限(每次最多 N 个任务) 定义活跃时段和静默时段
4. 监控和日志
# 查看任务状态
openclaw cron list
# 查看执行日志
openclaw logs --follow
# 检查健康状态
openclaw doctor
5. 成本控制
使用 sessionTarget: "isolated"避免阻塞主会话设置 timeoutSeconds限制执行时间监控 Token 消耗,及时调整任务频率
一键配置模板
如果你想快速开始,这是一个完整的夜间工作配置:
{
"name": "夜间工作队列",
"enabled": true,
"schedule": {
"kind": "cron",
"expr": "0 2 * * *",
"tz": "Asia/Shanghai"
},
"payload": {
"kind": "agentTurn",
"message": "执行以下任务:\n1. 抓取 GitHub Trending,分析趋势\n2. 检查代码仓库更新\n3. 生成每日报告保存到 ~/reports/$(date +%Y-%m-%d).md",
"thinking": "interleaved"
},
"sessionTarget": "isolated",
"delivery": {
"mode": "announce"
}
}
保存到 ~/.openclaw/cron/jobs.json,重启 Gateway,今晚就可以睡了。
如果你还不知道该如何配置,把这篇文章发给你的龙虾,告诉它你的需求,它会帮你配好的
🎯 关注 泡壶 AI
及时获取更多新鲜、有料还有味的 AI 资讯与观点
参考资料:
今日头条:《OpenClaw进阶:让AI主动找你干活》 今日头条:《OpenClaw 团队版,开源了!》 AI 天天看:《我,花2700元,用OpenClaw养了支24小时运转的AI团队》 CSDN:《OpenClaw的工程化困局:1.28亿Token灾难背后的架构反思》 OpenClaw 官方文档:docs.openclaw.ai
夜雨聆风