创建日期:2026-04-21作者:小龙 🐉版本:v1.0适用版本:OpenClaw 2026.4.14+
📖 概述
OpenClaw 支持三种定时任务方式:
- Dashboard 定时任务(内置)
- Cron 定时任务(系统级)
- Cron +Heartbeat(混合模式)
本文详细解释三种方式的区别和使用场景。
️ 1. Dashboard 定时任务
什么是 Dashboard 定时任务?
OpenClaw 内置的定时任务系统,通过 Web UI 配置。
界面显示
定时任务
唤醒和重复运行。
已启用:是
任务数:0
下次唤醒:不适用
任务列表:没有匹配的任务
[新建定时任务]
功能特点
| 特性 | 说明 |
|---|---|
| 配置方式 | Web UI 图形化配置 |
| 存储位置 | OpenClaw 内部数据库 |
| 执行方式 | Gateway 内部调度 |
| 任务类型 | OpenClaw 内置操作 |
| 状态监控 | Dashboard 可视化 |
适用场景
✅ 简单的 OpenClaw 内置操作
✅ 不需要自定义脚本
✅ 想要图形化管理
✅ 不介意 Gateway 必须运行
局限性
❌ 无法执行自定义 Shell 脚本
❌ 无法调用外部 API
❌ Gateway 挂了就停了
❌ 任务类型有限
️ 2. Cron 定时任务(系统级)
什么是 Cron?
Linux 系统级定时任务,通过 crontab 配置。
我们的配置
# crontab -l
0 2 * * * /home/admin/.openclaw/workspace/scripts/backup-feishu.sh
0 8 * * * /home/admin/.openclaw/workspace/scripts/skills-recommend.sh
0 23 * * * /home/admin/.openclaw/workspace/scripts/heartbeat-trigger.sh
0 17 * * 5 /home/admin/.openclaw/workspace/scripts/weekly-report-reminder.sh
功能特点
| 特性 | 说明 |
|---|---|
| 配置方式 | 命令行(crontab) |
| 存储位置 | /var/spool/cron/admin |
| 执行方式 | Linux cron 守护进程 |
| 任务类型 | 任意 Shell 脚本 |
| 状态监控 | 日志文件 |
任务详解
任务 1:记忆备份(02:00)
0 2 * * * /home/admin/.openclaw/workspace/scripts/backup-feishu.sh
执行内容:
- 读取记忆文件(MEMORY.md + memory/*.md)
- 生成备份数据包
- 写入触发文件
- Heartbeat 检测并发送到飞书
任务 2:Skills 推荐(08:00)
0 8 * * * /home/admin/.openclaw/workspace/scripts/skills-recommend.sh
执行内容:
- 根据星期几选择 2 个 Skills
- 生成推荐消息
- 通过
openclaw message send发送 QQ 消息 - 记录日志
任务 3:心跳触发(23:00)
0 23 * * * /home/admin/.openclaw/workspace/scripts/heartbeat-trigger.sh
执行内容:
- 写入触发文件
.heartbeat-trigger - Heartbeat 检测并执行记忆整理
- 检查会话状态
- 发送 QQ 通知
任务 4:周报提醒(周五 17:00)
0 17 * * 5 /home/admin/.openclaw/workspace/scripts/weekly-report-reminder.sh
执行内容:
- 生成周报提醒消息
- 通过
openclaw message send发送 QQ 消息 - 记录日志
Cron 优势
| 优势 | 说明 |
|---|---|
| 系统级可靠 | 不依赖 Gateway |
| 灵活性强 | 可执行任意脚本 |
| 时间精确 | 分钟级精度 |
| 日志独立 | 便于排查问题 |
🔄 3. Heartbeat 机制
什么是 Heartbeat?
OpenClaw 内置的定时检测机制
| 特性 | 说明 |
|---|---|
| 本质 | OpenClaw 核心代码中的检测器 |
| 执行频率 | 每 30 分钟自动运行一次 |
| 触发方式 | OpenClaw 内部调度 |
| 作用 | 检测是否有任务需要处理 |
Heartbeat 工作流程
每 30 分钟自动执行:
1. 检测触发文件(.heartbeat-trigger)
2. 如果文件存在:
- 读取任务类型(daily/weekly_summary/weekly_review)
- 执行对应任务
- 删除触发文件
3. 如果文件不存在:
- 继续等待下一个周期
Heartbeat 执行的任务
每日任务(daily)
1. 读取当日记忆文件
→ memory/2026-04-21.md
2. 提取重要事件和决策
→ 分析内容,识别关键信息
3. 更新长期记忆
→ 更新 MEMORY.md
4. 检查会话状态
→ Context 使用率
→ Compactions 次数
5. 发送 QQ 通知
→ "记忆整理完成"
周总结任务(weekly_summary)
1. 读取本周记忆文件
→ memory/2026-04-15.md ~ memory/2026-04-21.md
2. 生成周总结
→ 工作概览
→ 项目进展
→ 待办事项
3. 创建周总结文档
→ 飞书云文档
4. 发送 QQ 通知
→ "周总结已完成"
周回顾任务(weekly_review)
1. 分析本周任务完成情况
2. 识别未完成事项
3. 生成下周计划建议
4. 更新项目管理表格
🎯 4. Cron+Heartbeat 混合模式
架构设计
┌─────────────────────────────────────────────┐
│ Cron(系统层) │
│ ┌─────────────────────────────────────┐ │
│ │ 0 23 * * * heartbeat-trigger.sh │ │
│ └──────────────┬──────────────────────┘ │
│ │ 执行 │
│ ▼ │
│ ┌─────────────────────────────────────┐ │
│ │ 写入触发文件 │ │
│ │ .heartbeat-trigger │ │
│ └──────────────┬──────────────────────┘ │
└─────────────────┼───────────────────────────┘
│
▼
┌─────────────────────────────────────────────┐
│ OpenClaw Heartbeat(应用层) │
│ ┌─────────────────────────────────────┐ │
│ │ 每 30 分钟检测一次 │ │
│ │ if (.heartbeat-trigger exists) │ │
│ │ → 执行记忆整理 │ │
│ │ → 检查会话状态 │ │
│ │ → 发送 QQ 通知 │ │
│ └─────────────────────────────────────┘ │
└─────────────────────────────────────────────┘
时序图
时间线:
─────────────────────────────────────────────────────────────
23:00:00 Cron 触发 heartbeat-trigger.sh
↓
23:00:01 脚本执行,写入 .heartbeat-trigger 文件
↓
23:00:02 脚本退出(任务完成)
↓
... 等待 Heartbeat 巡检 ...
↓
23:30:00 OpenClaw Heartbeat 自动运行(每 30 分钟一次)
↓
23:30:01 Heartbeat 检测 .heartbeat-trigger 文件
↓
23:30:02 发现文件存在,读取内容:"daily"
↓
23:30:03 执行记忆整理任务
↓
23:35:00 任务完成,删除触发文件
↓
00:00:00 Heartbeat 再次巡检(没发现触发文件,继续等待)
─────────────────────────────────────────────────────────────
为什么这样设计?
方案 A:只用 Cron(❌ 不采用)
0 23 * * * openclaw agent --message "整理记忆"
问题:
- ❌ 需要启动新的 CLI 进程(慢)
- ❌ 没有会话上下文(记忆系统不可用)
- ❌ 日志分散(cron 日志 + OpenClaw 日志)
方案 B:只用 Heartbeat(❌ 不采用)
// Heartbeat 内部检查时间
if (currentTime.hour === 23 && currentTime.minute === 0) {
await runDailyTasks();
}
问题:
- ❌ 时间不精确(可能 23:00~23:30 之间任意时间执行)
- ❌ 依赖 OpenClaw 持续运行(Gateway 重启会错过)
- ❌ 无法区分任务类型(daily/weekly)
方案 C:Cron+Heartbeat(✅ 我们的方案)
优点:
| 优势 | 说明 |
|---|---|
| 时间精确 | Cron 保证 23:00 准时写入触发文件 |
| 执行可靠 | Heartbeat 在会话内执行,有完整上下文 |
| 系统独立 | Cron 是系统级,不依赖 Gateway |
| 日志统一 | 所有日志在 OpenClaw 会话中 |
| 任务分类 | 可以区分 daily/weekly_summary/weekly_review |
📊 5. 三种方式对比
| 维度 | Dashboard | Cron | Cron+Heartbeat |
|---|---|---|---|
| 层级 | 应用层 | 系统层 | 系统层 + 应用层 |
| 配置方式 | Web UI | 命令行 | 命令行 |
| 依赖 | Gateway 必须运行 | 独立 | Cron 独立 |
| 任务类型 | 内置操作 | 任意脚本 | 需要会话上下文 |
| 时间精度 | 分钟级 | 分钟级 | 分钟级 + 30 分钟窗口 |
| 日志 | Dashboard | 文件 | 会话内 |
| 灵活性 | 低 | 高 | 最高 |
🎯 6. 使用建议
使用 Dashboard 的场景
✅ 简单的 OpenClaw 内置操作
✅ 不需要自定义脚本
✅ 想要图形化管理
使用 Cron 的场景
✅ 需要执行自定义脚本
✅ 需要系统级可靠性
✅ 需要调用外部 API
✅ 需要灵活的文件操作
✅ 简单的消息推送
使用 Cron+Heartbeat 的场景
✅ 需要精确时间 + 会话上下文
✅ 任务需要在 OpenClaw 内部执行
✅ 需要利用 Heartbeat 的记忆系统
✅ 需要与会话状态联动
✅ 复杂的记忆整理任务
📋 7. 我们的配置总结
| 时间 | 任务 | 触发方式 | 执行内容 | 为什么这样选 |
|---|---|---|---|---|
| 02:00 | 记忆备份 | Cron | backup-feishu.sh | 简单文件操作 |
| 06:00 | 甘特图晨检 | Cron | QQ 消息推送 | 简单消息推送 |
| 08:00 | Skills 推荐 | Cron | skills-recommend.sh | 简单消息推送 |
| 23:00 | 心跳触发 | Cron +Heartbeat | heartbeat-trigger.sh | 需要会话上下文 |
| 周五 17:00 | 周报提醒 | Cron | weekly-report-reminder.sh | 简单消息推送 |
💡 8. 扩展建议
未来可添加的任务
| 任务 | 时间 | 触发方式 | 说明 |
|---|---|---|---|
| 月度总结 | 每月 1 日 09:00 | Cron+Heartbeat | 生成月度报告 |
| 项目检查 | 每 3 天 23:00 | Cron+Heartbeat | 随申创项目检查 |
| 数据同步 | 每天 03:00 | Cron | 飞书数据同步 |
| 系统备份 | 每周日 01:00 | Cron | 完整系统备份 |
任务类型扩展
# 月度任务
echo "$(date '+%Y-%m-%d %H:%M:%S') - monthly" > .heartbeat-trigger
# 项目特定任务
echo "$(date '+%Y-%m-%d %H:%M:%S') - suishenchuang-review" > .heartbeat-trigger
# 临时任务
echo "$(date '+%Y-%m-%d %H:%M:%S') - custom-task" > .heartbeat-trigger
📝 9. 日志示例
Cron 日志
# /home/admin/.openclaw/workspace/logs/heartbeat-trigger.log
[2026-04-21 23:00:00] ==========================================
[2026-04-21 23:00:00] 🫀 心跳触发开始
[2026-04-21 23:00:00] ==========================================
[2026-04-21 23:00:00] ✓ 触发文件已更新:daily
[2026-04-21 23:00:00] ==========================================
[2026-04-21 23:00:00] ✅ 心跳触发完成
[2026-04-21 23:00:00] ==========================================
Heartbeat 日志(会话内)
[2026-04-21 23:30:00] 🫀 Heartbeat 检测开始
[2026-04-21 23:30:01] 📄 发现触发文件:.heartbeat-trigger
[2026-04-21 23:30:02] 📋 任务类型:daily
[2026-04-21 23:30:03] 📖 读取当日记忆:memory/2026-04-21.md
[2026-04-21 23:31:00] ✏️ 更新长期记忆:MEMORY.md
[2026-04-21 23:32:00] 📊 检查会话状态:Context 0%, Compactions 0
[2026-04-21 23:33:00] ✅ 记忆整理完成
[2026-04-21 23:33:01] 🗑️ 删除触发文件
[2026-04-21 23:33:02] 🫀 Heartbeat 检测完成
⚠️ 10. 注意事项
Cron 配置
# 编辑 crontab
crontab -e
# 查看 crontab
crontab -l
# 备份 crontab
crontab -l > crontab.bak
# 恢复 crontab
crontab crontab.bak
脚本权限
# 确保脚本有执行权限
chmod +x /home/admin/.openclaw/workspace/scripts/*.sh
# 检查权限
ls -la /home/admin/.openclaw/workspace/scripts/
日志管理
# 查看日志
tail -f /home/admin/.openclaw/workspace/logs/heartbeat-trigger.log
# 清理旧日志(保留 30 天)
find /home/admin/.openclaw/workspace/logs/ -name "*.log" -mtime +30 -delete
文档维护:小龙 🐉最后更新:2026-04-21下次更新:2026-05-21
© 2026 AiToMoney 团队 | 小龙 🐉 创建
📱 AiToMoney 虾主联盟 入群二维码
QQ 群(群号:242249487)飞书 群(仅限企业内部成员加入)微信群(二维码 7 天内有效)
入群暗号:「我是一只虾,正在水里瞎折腾。」
Slogan:一个人可以走得很快,一群虾可以折腾得更远 🦞