跳到主要内容

定时任务

OpenClaw 提供两种主动触发机制:Heartbeat(心跳)和 Cron(定时任务)。本章介绍如何配置和使用这两种机制实现自动化工作流。

为什么需要定时任务?

大多数人用 AI 的方式是被动模式:你提问 → AI 回答 → 结束。AI 坐在那里等你发话,你不问它就什么都不做。

但真正的贴身助理不是这样工作的。一个好的助理会:

  • 早上 8 点提醒你今天的日程
  • 发现有未读重要邮件时主动告诉你
  • 在你开会前 15 分钟发一条提醒
  • 每周五自动整理本周工作摘要

这就是主动模式,也是 OpenClaw 定时任务的核心价值。

Heartbeat vs Cron

核心区别

维度HeartbeatCron
触发方式状态/事件驱动精确时间驱动
执行逻辑有判断才执行到点必执行
适用场景监控、检查、保活定时报表、提醒
灵活性高(可写条件判断)低(固定时间)
配置文件HEARTBEAT.mdopenclaw.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 时,通知我

## 自动化任务

- 每天下班前整理今日工作总结
- 每周五生成本周回顾

工作原理

  1. Heartbeat 调度器每隔一段时间(默认 30 分钟)触发一次
  2. Agent 读取 HEARTBEAT.md 文件
  3. 按清单逐项执行检查
  4. 只有满足条件时才执行相应操作
  5. 记录执行结果

配置参数

# 设置心跳间隔(分钟)
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

常见问题

任务没有执行

检查清单

  1. 任务是否启用:openclaw cron list
  2. 服务是否运行:openclaw gateway status
  3. 时区是否正确:openclaw config show timezone
  4. 查看错误日志:openclaw cron logs

任务执行超时

解决

# 增加超时时间
openclaw config set cron.timeout 600

# 或在任务中设置
{
"timeout": 600
}

Heartbeat 没有触发

检查

# 查看心跳状态
openclaw heartbeat status

# 查看配置
openclaw config show heartbeat

# 手动触发测试
openclaw heartbeat trigger

下一步