Skip to content

定时任务

概述

OpenClaw 的定时任务(Cron)系统让 AI 可以主动工作,而不是被动等待你的指令。你可以让它每天早上发送简报、每小时检查服务器状态、每周生成工作总结。任务在 Gateway 中持久化存储,即使重启也不会丢失。

OpenClaw Cron 不是传统的 Linux cron,而是一个让 AI 按时间表主动执行任务的系统,支持三种调度方式:

调度方式说明示例
at一次性,在指定时间执行一次--at 20m(20 分钟后)
every固定间隔,每隔一段时间执行--every 10m(每 10 分钟)
cron表达式,精确控制时间--cron "0 8 * * *"(每天早上 8 点)

心跳(Heartbeat)

心跳是 OpenClaw 最核心的定时任务功能。它像生物钟一样,每隔一段时间唤醒 AI,让 AI 读取当前状态和 HEARTBEAT.md 文件,自主判断「我现在该不该为你做点什么」。

推荐频率

使用强度建议间隔
轻度使用每 2-4 小时一次
中度使用每 1-2 小时一次
重度使用每 30 分钟一次

注意 Token 消耗

每次心跳都会消耗 Token。入门阶段建议保持禁用状态,等到重度使用且 Token 充足时再开启。

管理心跳

bash
# 查看心跳状态
openclaw cron list

# 设置心跳间隔
openclaw cron set heartbeat "0 */2 * * *"  # 每 2 小时

# 禁用心跳
openclaw cron disable heartbeat

创建定时任务

通过对话创建(最简单)

直接告诉 OpenClaw 你需要什么:

text
每天早上 8 点给我发送今日简报,包括天气、日程和重要邮件

OpenClaw 会自动创建定时任务并保存,你只需要用自然语言描述。

通过命令行创建

bash
# 添加定时任务(--name 必填,--channel 指定发送目标)
openclaw cron add --name "每日简报" --cron "30 7 * * *" \
  --message "发送今日简报" --channel "telegram:chat:123456789"

# 添加间隔任务
openclaw cron add --name "健康检查" --every 10m \
  --message "检查服务器状态" --channel "qqbot:c2c:your_openid"

# 添加一次性任务(20 分钟后执行)
openclaw cron add --name "提醒我" --at 20m \
  --message "该休息了" --channel "telegram:chat:123456789"

--channel 格式

定时任务是主动推送,必须用 --channel 指定发送目标:

  • Telegram 私聊:telegram:chat:<ChatID>
  • QQ 私聊:qqbot:c2c:<openid>
  • QQ 群聊:qqbot:group:<groupid>
  • 飞书:feishu:chat:<chatId>

不指定 --channel 时,任务仍会执行,但结果只能在 Web 控制面板中查看。

管理任务

bash
# 查看所有任务和状态
openclaw cron list

# 手动触发执行(测试用)
openclaw cron run <name>

# 暂停/恢复任务
openclaw cron disable <name>
openclaw cron enable <name>

# 查看执行历史
openclaw cron runs --id <jobId>

# 编辑任务
openclaw cron edit <jobId>

# 删除任务
openclaw cron rm <jobId>

实战案例

每日简报

text
每天早上 7:30 给我发送今日简报到 Telegram:
1. 北京今天的天气和空气质量
2. 今天的日历事件列表
3. 未读的重要邮件(来自老板或客户的)
4. Hacker News 今日热门前 3 条

服务器监控

text
每 10 分钟检查服务器状态,如果 CPU 超过 90% 或内存超过 85% 就发送告警到飞书

周报生成

text
每周五下午 5 点生成本周工作总结:
- 统计 Git 提交次数和代码行数
- 列出完成的 Jira 任务
- 生成 Markdown 格式周报
- 发送到飞书工作群

数据备份

text
每天凌晨 2 点备份数据库到 S3,完成后通知我

定期清理

text
每周日凌晨 3 点清理 30 天前的日志文件,保留错误日志

高级配置

全局设置

openclaw.json 中配置:

json
{
  "cron": {
    "enabled": true,
    "maxConcurrentRuns": 2
  }
}

条件执行

在 prompt 中直接写条件逻辑,OpenClaw 会智能理解:

bash
openclaw cron add --name "disk_alert" --cron "*/30 * * * *" \
  --message "检查磁盘使用率,如果超过 80% 就发送告警,否则不做任何操作"

任务依赖

任务之间可以设置依赖关系(在 ~/.openclaw/cron/jobs.json 中):

json
{
  "name": "upload_backup",
  "schedule": "0 3 * * *",
  "depends_on": "backup_db",
  "prompt": "将备份文件上传到云存储"
}

upload_backup 只有在 backup_db 成功执行后才会运行。

错误处理与重试

json
{
  "name": "api_sync",
  "schedule": "0 */1 * * *",
  "prompt": "从 API 同步数据到本地数据库",
  "retry": {
    "max_attempts": 3,
    "delay": 60
  },
  "on_failure": {
    "notify": true,
    "channel": "telegram"
  }
}

推荐通过对话或 CLI 创建任务

jobs.json 由 Gateway 管理,手动编辑需要先停止 Gateway。日常使用推荐通过对话或 openclaw cron add 命令创建任务。

超时保护

防止任务运行时间过长:

json
{
  "name": "data_sync",
  "schedule": "0 */1 * * *",
  "prompt": "同步 API 数据到本地",
  "timeout": 300
}

timeout 单位为秒,超时后任务会被自动终止。

调度频率建议

任务类型建议频率说明
系统监控5-10 分钟CPU、内存、磁盘告警
数据同步15-30 分钟API 数据拉取
日报/简报每天 1 次固定时间推送
周报每周 1 次周五下午
备份每天 1 次凌晨低峰期
清理每周 1 次周末凌晨

减少不必要的通知

使用条件执行(在 prompt 中写明条件)来减少噪音。例如「只在 CPU 超过 90% 时才通知」,而不是每次都发送状态报告。

基于 MIT 协议发布