专栏定位:OpenClaw 从入门到精通(第 10 章)
适读人群:开发者、技术爱好者、AI应用创业者

摘要

如果 OpenClaw 只能在对话时工作,那它只是一个响应式的工具。但 OpenClaw 支持两种主动工作模式——定时任务(Cron)和心跳机制(Heartbeat)——让它能够在指定时间自动执行任务,甚至主动给你发消息。本章将深入探讨 Cron 表达式的编写、OpenClaw Cron 任务的配置与管理、HEARTBEAT.md 的检查清单机制,以及如何构建一个完整的自动化工作流。学完本章,你将能够配置「每日早 8 点推送天气 + 检查邮件」这样的自动化场景。

SEO 摘要

OpenClaw Cron 定时任务配置、HEARTBEAT.md 心跳机制、cron 表达式详解、自动任务工作流、定时推送与主动提醒。

目录

  • 为什么需要自动化任务
  • Cron 表达式详解
  • OpenClaw Cron 任务
  • Heartbeat 机制
  • HEARTBEAT.md 检查清单
  • 多任务批处理
  • 实战:每日早 8 点天气 + 邮件检查
  • 常见错误与避坑指南
  • 术语注释
  • 面试高频问答
  • 深度扩展
  • 附录
  • 系列总结(第 01-10 章)
  • 版权声明

开篇

想象这样一个场景:

每天早上 8:00,在你起床之前,OpenClaw 已经自动完成了这些事情:

  • 检查了公司邮箱,把紧急邮件标记出来
  • 查询了今天的天气,提醒你是否需要带伞
  • 检查了你的日历,看看今天有什么重要会议
  • 查看了一下 CI/CD 流水线,看看有没有构建失败
  • 把今天的待办事项整理成清单,发到你的飞书

等你 8:30 坐到工位时,所有你需要知道的信息都已经准备好了。

这就是定时任务(Cron)和心跳机制(Heartbeat)的威力——它们让 OpenClaw 从一个「等你问」的被动工具,变成一个「主动告诉你」的智能助手。

核心知识点

1. 为什么需要自动化任务

1.1 被动 vs 主动

大多数 AI 工具都是被动响应的——你问,它答。但 OpenClaw 的设计不止于此:

模式工作方式场景
被动响应用户问,AI 答日常对话、问题解答
定时任务按设定时间自动执行每天日报推送、定期检查
心跳机制定期检查,主动报告邮件监控、CI 状态
1.2 Cron 和 Heartbeat 的区别
维度CronHeartbeat
触发方式精确时间周期性(近似)
执行环境独立会话共享主会话上下文
典型用途定时推送、定期任务状态检查、提醒
API 调用独立共享主会话

简单说:Cron 适合定时精确执行的任务,Heartbeat 适合需要上下文判断的主动检查

2. Cron 表达式详解

2.1 Cron 的基本格式

Cron 表达式有 5 个字段,格式为:

┌───────────── 分钟 (0 - 59)
│ ┌───────────── 小时 (0 - 23)
│ │ ┌───────────── 日期 (1 - 31)
│ │ │ ┌───────────── 月份 (1 - 12)
│ │ │ │ ┌───────────── 星期 (0 - 6,0 = 周日)
│ │ │ │ │
* * * * *
2.2 常用表达式示例
表达式含义
0 8 * * *每天早上 8:00
30 8 * * *每天早上 8:30
0 9 * * 1-5工作日早上 9:00
0 */2 * * *每 2 小时
0 0 * * 0每周日午夜(周一凌晨)
30 22 * * 1-5工作日晚上 10:30
0 0 1 * *每月 1 日午夜
*/15 * * * *每 15 分钟
2.3 特殊字符
字符含义示例
*任意值* * * * * = 每分钟
,枚举1,15 * * * * = 每小时第 1 和 15 分钟
-范围0 9-17 * * * = 早上 9 点到下午 5 点每小时
/步长*/5 * * * * = 每 5 分钟
?不指定(仅用于日/周)0 0 ? * 1 = 每周一
2.4 中国时区注意事项

OpenClaw 默认使用 UTC 时间。如果你在北京时间(UTC+8),需要相应调整:

北京时间UTCCron 表达式
早上 8:0000:000 0 * * *
早上 9:0001:000 1 * * *
晚上 22:0014:000 14 * * *

3. OpenClaw Cron 任务

3.1 添加 Cron 任务
# 基础用法
openclaw cron add "0 8 * * *" --name "每日早报" --prompt "
查询今天的天气,生成简报,发送到飞书群
"

# 完整参数
openclaw cron add "0 8 * * *" \
    --name "每日早报" \
    --prompt "你的任务描述" \
    --model "anthropic/claude-3-5-sonnet" \
    --timeout 300000
3.2 Cron 任务配置参数
参数说明示例
scheduleCron 表达式"0 8 * * *"
name任务名称"每日早报"
prompt执行内容任务描述
model使用的模型"deepseek-chat"
timezone时区"Asia/Shanghai"
timeout超时时间(毫秒)300000
enabled是否启用true
notification完成通知true
3.3 查看 Cron 任务
# 列出所有任务
openclaw cron list

# 输出示例:
# ╔════════════════════════════════════════════════════════════════╗
# ║                        Cron Tasks                             ║
# ╠════════════════════════════════════════════════════════════════╣
# ║  ID       NAME        SCHEDULE       NEXT RUN    STATUS     ║
# ║  cron_1   每日早报    0 8 * * *     08:00       ✅ 启用    ║
# ║  cron_2   周报生成    0 10 * * 1    Mon 10:00   ✅ 启用    ║
# ║  cron_3   清理日志    0 3 * * *     03:00       ✅ 启用    ║
# ╚════════════════════════════════════════════════════════════════╝
3.4 管理 Cron 任务
# 暂停任务
openclaw cron pause cron_1

# 恢复任务
openclaw cron resume cron_1

# 删除任务
openclaw cron delete cron_3

# 手动触发一次
openclaw cron run cron_1

# 查看任务历史
openclaw cron history cron_1

# 输出:
# cron_1 - 每日早报
# ─────────────────────────────────────────
# 2026-03-29 08:00  ✅ 成功 (耗时 45s)
# 2026-03-28 08:00  ✅ 成功 (耗时 52s)
# 2026-03-27 08:00  ✅ 成功 (耗时 38s)
# 2026-03-26 08:00  ❌ 失败 (API 超时)
# 2026-03-25 08:00  ✅ 成功 (耗时 41s)
3.5 Cron 任务的执行环境

Cron 任务在独立的新会话中执行,这意味着:

  • 不加载 MEMORY.md(没有用户上下文)
  • 不加载 USER.md(没有用户偏好)
  • 有独立的上下文窗口

如果需要用户信息,需要在 prompt 中提供:

openclaw cron add "0 8 * * *" \
    --name "每日早报" \
    --prompt "
这是为用户 李明 执行的早间简报任务。

用户偏好:
- 喜欢简洁的格式
- 不喜欢太长的内容(控制在 500 字以内)
- 关注天气和日程

执行内容:
1. 查询北京今天天气
2. 查询用户日历(如果有 Google Calendar API)
3. 整理成简报,发送到飞书群

发送格式:
【早间简报】🌅
📅 日期:xxx
🌤️ 天气:xxx
📋 日程:xxx
..."

4. Heartbeat 机制

4.1 什么是 Heartbeat

Heartbeat(心跳)是一种轻量级的定期检查机制。当 OpenClaw 收到心跳消息时,它会读取 HEARTBEAT.md 文件,按照其中的检查清单执行任务。

与 Cron 的区别:

维度CronHeartbeat
触发频率精确(定时)近似(每 N 分钟)
执行会话新建独立会话主会话(有上下文)
主要用途定时推送、定期任务状态检查、主动提醒
配置位置openclaw cronHEARTBEAT.md
4.2 Heartbeat 的触发

Heartbeat 通常由外部系统定期触发:

# 通过 Webhook 触发心跳
curl -X POST http://localhost:18792/heartbeat \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer YOUR_TOKEN"

或者由其他定时器触发:

# 每 30 分钟触发一次心跳
*/30 * * * * curl -s http://localhost:18792/heartbeat
4.3 Heartbeat vs Cron 选择
需要精确时间吗?
    ↓ 是
→ Cron

需要用户的完整上下文吗?
    ↓ 是
→ Heartbeat

需要发送消息到用户吗?
    ↓ 是
→ Heartbeat

任务是否危险/不可逆?
    ↓ 是
→ Cron(独立会话更安全)

是否需要不同模型?
    ↓ 是
→ Cron

5. HEARTBEAT.md 检查清单

5.1 基本结构
# HEARTBEAT.md

## Periodic Checks

Rotate through these checks on each heartbeat:

- [ ] Check unread emails
- [ ] Check calendar for upcoming events
- [ ] Check CI/CD pipeline status

## Always Check

- Any pending tasks from previous conversations?
- Any overdue follow-ups?

## Proactive Announcements

When I find something important, send a notification.
When nothing needs attention, reply HEARTBEAT_OK.

## Quiet Hours

No proactive announcements during 23:00 - 08:00.
Weekend: no announcements before 10:00.

## State Tracking

Use `memory/heartbeat-state.json` to track last check times.
5.2 检查项分类

第一类:信息获取(只读)

### Information Gathering

- [ ] Check Gmail unread count
- [ ] Check Google Calendar (events in next 2 hours)
- [ ] Check weather (if user might go outside)
- [ ] Check Slack/Feishu unread messages

第二类:状态检查

### Status Checks

- [ ] CI/CD pipeline: any failures?
- [ ] Cron tasks: any missed runs?
- [ ] Disk space: any servers running low?

第三类:主动提醒

### Reminders

- [ ] Meeting in 15 minutes?
- [ ] Deadline approaching (within 24h)?
- [ ] Long-pending tasks that need follow-up?
5.3 状态追踪

为了避免重复检查,使用 heartbeat-state.json 追踪上次检查时间:

{
  "lastChecks": {
    "email": 1703275200,
    "calendar": 1703260800,
    "weather": null,
    "ci": 1703250000
  },
  "checkIntervals": {
    "email": 1800,
    "calendar": 900,
    "weather": 10800,
    "ci": 300
  }
}

检查逻辑:

def should_check_email():
    last = state["lastChecks"]["email"]
    interval = state["checkIntervals"]["email"]
    return (now - last) >= interval
5.4 静默时段

HEARTBEAT.md 支持配置静默时段:

## Quiet Hours

### Weekdays (Mon-Fri)
No proactive announcements: 23:00 - 08:00

### Weekends
No proactive announcements: 23:00 - 10:00

### Exceptions
Even during quiet hours, still check and report:
- System failures (CI/CD down)
- Security alerts
- Critical deadlines

6. 多任务批处理

6.1 批处理策略

当有多个检查任务时,使用批处理减少 API 调用:

## Batch Strategy

Instead of separate checks, batch similar tasks:

**Batch 1: Communication**
- Email (unread count, urgent items)
- Slack/Feishu mentions
- Calendar events

**Batch 2: Infrastructure**
- CI/CD status
- Server health
- Error logs

**Batch 3: Project Status**
- Jira task updates
- GitHub PR activity
- Deadline tracking

Rotate batches across heartbeats:
- Heartbeat 1: Communication
- Heartbeat 2: Infrastructure
- Heartbeat 3: Project Status
- Heartbeat 4: (quick sweep of all)
6.2 优先级处理
## Priority Levels

### P0 - Always Report (any time)
- Critical system failures
- Security incidents
- Production bugs

### P1 - During Work Hours
- CI/CD failures
- Meeting reminders
- Deadline reminders

### P2 - Daily Summary Only
- Non-urgent emails
- Team activity summaries
- Weekly reports
6.3 任务超时

每个检查任务应该设置合理的超时:

## Timeouts Per Check

- Email check: 10 seconds
- Calendar check: 10 seconds
- CI/CD check: 15 seconds
- Weather: 5 seconds

Total heartbeat budget: 60 seconds
If running over, stop and log.

7. 实战:每日早 8 点天气 + 邮件检查

7.1 需求

每天早上 8:00:

  1. 检查 Gmail 邮箱,获取未读数量和紧急邮件
  2. 查询北京天气和上海天气
  3. 生成简报发送到飞书群
7.2 配置步骤

第一步:安装必要 Skills

# 确认 weather skill 已安装
openclaw skills list | grep weather

# 确认 feishu message 已配置
cat .env | grep FEISHU

第二步:配置邮件检查

如果使用 Gmail,需要配置 Gmail API 或使用 IFTTT/Zapier 等中间件。为了简化,我们使用 IFTTT Webhook 作为示例。

第三步:创建 Cron 任务

openclaw cron add "0 8 * * *" \
    --name "每日早间简报" \
    --timezone "Asia/Shanghai" \
    --timeout 300000 \
    --prompt "
你是李明的早间助理。请执行以下任务:

## 任务背景
用户:李明
发送目的地:飞书群 oc_xxxxxxxxxxxxxxxxxxxxxxxxxxxx
现在时间:2026年3月30日早上8点

## 任务清单

### 1. 检查邮件状态
检查 Gmail 邮箱,获取:
- 未读邮件总数
- 标记为「重要」的未读邮件(最多3封)
- 发件人和主题

如果没有紧急邮件,报告「暂无紧急邮件 ✅」

### 2. 查询天气
查询以下城市的今日天气:
- 北京:温度、天气状况、是否适合出行
- 上海:温度、天气状况、是否需要带伞

使用 weather skill 查询。

### 3. 生成简报
格式如下:

【早间简报】🌅 2026-03-30

📧 邮件状态
• 未读:X 封
• 重要:
  - [发件人] [主题]
  - ...

🌤️ 今日天气
• 北京:XX°C,晴,适合出行
• 上海:XX°C,有雨,记得带伞🌂

📋 今日提示
• ...

---
🤖 由 OpenClaw AI 助手自动生成
"

### 4. 发送简报
使用 message tool 发送到飞书群:
- channel: feishu
- target: oc_xxxxxxxxxxxxxxxxxxxxxxxxxxxx
- message: 上面生成的简报内容
"

第四步:验证

# 查看任务
openclaw cron list

# 手动触发测试
openclaw cron run cron_1

# 查看日志
openclaw logs --tail 50
7.3 高级版:加入 Heartbeat 检查

除了早上的定时简报,还可以在 HEARTBEAT.md 中配置日常检查:

# HEARTBEAT.md

## Periodic Checks (Rotate)

### Check 1 (Every 30 min during work hours)
- Check email unread count
- If > 10 unread OR any marked important → Report

### Check 2 (Every 2 hours during work hours)
- Check CI/CD pipeline status
- If any failures → Report immediately

### Check 3 (Every morning at 9:30)
- Check calendar for today's meetings
- If meetings in next 30 min → Reminder

## Always Check

- Any urgent tasks from previous conversations?

## Proactive Announcements

Send message when:
- Critical email received
- CI/CD pipeline failed
- Meeting starting in 15 minutes
- User asked me to remind them

Stay silent (HEARTBEAT_OK) when:
- Nothing noteworthy found
- During quiet hours (23:00 - 08:00)
- Weekend mornings before 10:00

## Quiet Hours

Weekdays: 23:00 - 08:00
Weekends: 23:00 - 10:00

## State Tracking

Last checks stored in memory/heartbeat-state.json
Check intervals defined in that file.

常见错误与避坑指南

错误 1:Cron 表达式时区错误

症状: 任务总是在预期时间的前/后 8 小时执行

原因: 忘记 OpenClaw 默认使用 UTC,需要换算

解决:

# 使用 --timezone 参数明确指定
openclaw cron add "0 8 * * *" --timezone "Asia/Shanghai"

# 或者换算成 UTC
# 北京时间 8:00 = UTC 0:00
openclaw cron add "0 0 * * *"

错误 2:Cron 任务没有发送消息

症状: 任务执行了(看日志)但群里没有收到消息

排查:

  1. 确认飞书 channel 配置正确
  2. 确认 chat_id 正确
  3. 检查 message prompt 是否包含了发送指令
  4. 查看 OpenClaw 日志中的发送结果

错误 3:Heartbeat 过于频繁

症状: OpenClaw 响应变慢,API 消耗激增

原因: Heartbeat 配置了太多检查项,或者触发频率太高

解决:

# 优化:减少检查频率和项数
## 每次心跳只检查一项
- Heartbeat 1: Email
- Heartbeat 2: Calendar
- Heartbeat 3: CI/CD
- 轮换进行,不要每次全部检查

错误 4:Cron 任务超时

症状: 任务执行中断,日志显示超时

原因: 任务执行时间超过了 timeout 设置

解决:

# 增加 timeout 时间
openclaw cron add "0 8 * * *" \
    --name "复杂任务" \
    --timeout 600000  # 10 分钟

# 或者优化任务,减少工作量

错误 5:静默时段没有生效

症状: 深夜仍然收到推送

原因: HEARTBEAT.md 的静默时段规则没有正确配置

解决: 确保在 HEARTBEAT.md 中明确写入了静默规则:

## Quiet Hours

**Weekdays (Mon-Fri):** 23:00 - 08:00
**Weekends:** 23:00 - 10:00

**During quiet hours:** Only send for P0 (critical) events.

术语注释

术语英文解释
Cron时间调度Unix 系统中的定时任务工具
Heartbeat心跳定期触发的检查机制
HEARTBEAT.md心跳配置文件定义心跳检查项的清单
Quiet Hours静默时段不主动推送的时间段
Batch Processing批处理合并多个任务一次执行
Timeout超时任务最大执行时间

面试高频问答

Q1:Cron 和 Heartbeat 各有什么适用场景?

回答:Cron 适合精确时间驱动的任务需要隔离执行的任务。比如每天早上 8:00 推送日报(精确)、定时备份数据库(危险操作,需要隔离)、发送周报邮件(定时)。Heartbeat 适合需要上下文判断的主动检查高频但轻量的监控。比如检查是否有紧急邮件(有上下文判断:什么是紧急)、CI/CD 失败了需要立即通知(主动推送)、用户是否忘记了某个待办(上下文相关)。

Q2:如何避免 Heartbeat 产生大量无效通知?

回答:三个策略。第一是静默时段:深夜不推送,非工作时间降低频率。第二是阈值控制:比如「未读邮件 > 10 封才推送」而不是每封都推。第三是去重:同一个问题已经提醒过了,短时间内不再提醒。通过 heartbeat-state.json 追踪上次提醒的内容和时间。

Q3:Cron 任务的执行失败率很高怎么办?

回答:首先检查失败原因——是 API 超时?外部服务挂了?还是代码错误?常见处理:增加 timeout 时间(如果超时);实现重试机制(如果外部服务不稳定);将大型任务拆分成小步骤。也可以设置补偿任务——Cron 任务失败后,下一次心跳时检测并尝试补救。

深度扩展

深度 1:Cron 任务的执行日志与告警

配置 Cron 任务失败时的告警:

openclaw cron add "0 8 * * *" \
    --name "每日日报" \
    --prompt "..." \
    --on-failure "notify" \
    --notify-channel "feishu" \
    --notify-target "oc_xxx"

这会在 Cron 任务失败时自动发送告警到飞书群。

深度 2:条件执行

更高级的 Cron 支持条件触发:

# 只有在满足条件时才执行
openclaw cron add "0 8 * * *" \
    --name "工作日日报" \
    --condition "day_of_week >= 1 AND day_of_week <= 5" \
    --prompt "发送日报..."

深度 3:Cron 链式任务

一个任务完成后触发下一个任务:

# 任务 A:数据采集
openclaw cron add "0 7 * * *" \
    --name "采集数据" \
    --prompt "从 Jira 采集昨日数据,保存到..." \
    --on-complete "trigger:cron_2"

# 任务 B:生成报告(由任务 A 触发)
openclaw cron add "0 8 * * *" \
    --name "生成报告" \
    --prompt "读取昨日数据,生成报告..." \
    --trigger-mode "manual_or_on_complete:cron_1"

附录

A.1 Cron 表达式速查表

时间Cron说明
每分钟* * * * *调试用
每小时0 * * * *每小时整点
每天 8:000 8 * * *UTC 0:00 = 北京 8:00
每天 9:000 9 * * *UTC 1:00 = 北京 9:00
工作日 8:000 8 * * 1-5周一至周五
每周一 10:000 10 * * 1UTC 2:00 = 北京 10:00
每月 1 日0 0 1 * *UTC 0:00 = 北京 8:00
每 15 分钟*/15 * * * *频率较高

A.2 Cron 管理命令

openclaw cron list          # 列出所有任务
openclaw cron add           # 添加任务
openclaw cron delete <id>   # 删除任务
openclaw cron pause <id>    # 暂停任务
openclaw cron resume <id>   # 恢复任务
openclaw cron run <id>      # 手动触发一次
openclaw cron history <id>  # 查看执行历史
openclaw cron edit <id>     # 编辑任务

A.3 HEARTBEAT.md 模板

# HEARTBEAT.md

## Periodic Checks (Rotate)

- [ ] [检查项 1]
- [ ] [检查项 2]
- [ ] [检查项 3]

## Always Check

- 有没有需要跟进的?

## Proactive Announcements

通知用户当:
- [条件 1]
- [条件 2]

静默(HEARTBEAT_OK)当:
- [静默条件]

## Quiet Hours

- 工作日:23:00 - 08:00
- 周末:23:00 - 10:00

## State Tracking

memory/heartbeat-state.json

系列总结(第 01-10 章)

通过前十章的学习,我们已经全面掌握了 OpenClaw 的核心能力:

第 01-06 章: 基础认知、配置体系、人格设计、记忆系统、Skills 架构、核心工具集
第 07-08 章: 编程 Agent 集成、多模型智能路由
第 09 章: 飞书集成,打造企业级 AI 助手
第 10 章: 定时任务与 Heartbeat,让 Agent 自动工作

现在你已经能够构建完整的自动化工作流。接下来的两章我们将学习复杂任务分解与执行(Subagent 与会话管理)以及安全与权限控制。读完第 11 和 12 章,你将能够安全地在生产环境中部署 OpenClaw。

版权声明

本文为原创技术实践文章,禁止未经授权的全文转载;引用请注明出处与本文链接。

Logo

这里是“一人公司”的成长家园。我们提供从产品曝光、技术变现到法律财税的全栈内容,并连接云服务、办公空间等稀缺资源,助你专注创造,无忧运营。

更多推荐