CoPaw Cron 定时任务系统详解
CoPaw Cron 定时任务系统详解
CoPaw 的 Cron 系统是一个强大的定时任务调度器,让你可以自动化执行各种重复性任务,如定期检查、数据备份、报告生成等。本文将详细介绍 Cron 系统的配置和使用方法。
Cron 系统概述
什么是 Cron?
Cron 是 CoPaw 的定时任务调度系统,类似于 Unix/Linux 的 cron 任务调度器。它可以:
- 按照预定的时间执行任务
- 支持复杂的调度规则
- 管理任务的生命周期(创建、暂停、恢复、删除)
- 查看任务执行历史和日志
Cron 的应用场景
| 场景 | 频率 | 示例 |
|------|------|------|
| 定期检查 | 每 30 分钟 | 检查邮件、日历、通知 |
| 数据备份 | 每天凌晨 | 备份 Memory 数据库 |
| 报告生成 | 每周一 | 生成周报 |
| 系统维护 | 每月 | 清理临时文件 |
| 提醒事项 | 定时 | 提醒重要会议 |
Cron vs Heartbeat
| 特性 | Cron | Heartbeat |
|------|------|-----------|
| 精度 | 高精度,精确到分钟 | 低精度,约 30 分钟 |
| 适用场景 | 定时任务、独立任务 | 合并检查、上下文相关 |
| 配置方式 | Crontab 格式 | HEARTBEAT.md 配置 |
| 资源消耗 | 每个任务独立 | 合并执行更节省 |
使用原则:
- 用 Cron 当:精确时间很重要("每周一上午 9:00 准点")
- 用 Heartbeat 当:多个检查可以合并,时间可以浮动
Cron 配置
基本配置
编辑配置文件:
{
"cron": {
"enabled": true,
"storage_path": ".copaw/cron",
"timezone": "Asia/Shanghai",
"max_concurrent_tasks": 5,
"log_retention_days": 30,
"notification": {
"enabled": true,
"on_failure": true,
"channel": "telegram"
}
}
}
通过控制台配置
# 启用 Cron 系统
/config set cron.enabled true
# 设置时区
/config set cron.timezone Asia/Shanghai
# 设置最大并发任务数
/config set cron.max_concurrent_tasks 5
# 启用失败通知
/config set cron.notification.enabled true
# 保存配置
/config save
Cron 表达式语法
基本格式
┌───────────── 分钟 (0 - 59)
│ ┌─────────── 小时 (0 - 23)
│ │ ┌───────── 日期 (1 - 31)
│ │ │ ┌─────── 月份 (1 - 12)
│ │ │ │ ┌───── 星期 (0 - 7, 0 和 7 都表示周日)
│ │ │ │ │
│ │ │ │ │
* * * * *
特殊字符
| 字符 | 说明 | 示例 |
|------|------|------|
| | 任意值 | = 每分钟 |
| , | 列表分隔 | 1,3,5 = 每小时的第 1、3、5 分钟 |
| - | 范围 | 1-5 = 每小时的第 1-5 分钟 |
| / | 步长 | /10 = 每 10 分钟 |
| ? | 不指定(日期和星期) | 0 0 1 ? = 每月 1 号,不指定星期 |
常用示例
| 表达式 | 说明 |
|--------|------|
| 0 | 每小时的第 0 分钟执行 |
| /15 | 每 15 分钟执行 |
| 0 0 | 每天凌晨 0 点执行 |
| 0 9 | 每天上午 9 点执行 |
| 0 9 1-5 | 周一到周五上午 9 点执行 |
| 0 0 1 | 每月 1 号凌晨执行 |
| 0 0 1 1 | 每年 1 月 1 号执行 |
| 0 0 12 ? | 每天中午 12 点执行 |
Cron 任务管理
创建任务
基本命令
# 创建任务
/cron add <任务名称> --schedule <Cron表达式> --command <命令>
# 示例:每小时检查邮件
/cron add 检查邮件 --schedule "0 * * * *" --command "/mail check"
# 示例:每天凌晨备份
/cron add 数据备份 --schedule "0 0 * * *" --command "/memory backup --output backups/memory_$(date +%Y%m%d).zip"
带参数的任务
# 添加任务描述
/cron add 周报生成 --schedule "0 9 * * 1" --command "/report generate --type weekly" --desc "每周一生成周报"
# 添加任务标签
/cron add 日志清理 --schedule "0 0 * * 0" --command "/log cleanup --days 30" --tags maintenance,cleanup
# 设置任务超时
/cron add 数据同步 --schedule "*/30 * * * *" --command "/sync run" --timeout 300
查询任务
# 列出所有任务
/cron list
# 查看任务详情
/cron show <任务ID或名称>
# 按标签筛选
/cron list --tags maintenance
# 搜索任务
/cron search 邮件
任务状态管理
# 暂停任务
/cron pause <任务ID>
# 恢复任务
/cron resume <任务ID>
# 禁用任务
/cron disable <任务ID>
# 启用任务
/cron enable <任务ID>
# 删除任务
/cron delete <任务ID>
执行历史和日志
# 查看任务执行历史
/cron history <任务ID>
# 查看最新执行日志
/cron logs <任务ID>
# 查看所有任务的状态
/cron status
# 查看任务统计
/cron stats
常用 Cron 任务示例
1. 定期检查收件箱
# 每 30 分钟检查一次邮件
/cron add 检查邮件 --schedule "*/30 * * * *" --command "/mail check --unread"
# 设置通知
/cron set 检查邮件 --notification --channel telegram
2. 定期备份数据
# 每天凌晨 2 点备份 Memory
/cron add Memory备份 --schedule "0 2 * * *" --command "/memory backup --output backups/memory_$(date +\%Y\%m\%d).zip"
# 每周日备份配置
/cron add 配置备份 --schedule "0 3 * * 0" --command "/config backup --output backups/config_$(date +\%Y\%m\%d).zip"
# 保留最近 7 天的备份
/cron add 清理备份 --schedule "0 4 * * *" --command "/trash remove backups/memory_*.zip --older-than 7days"
3. 定期生成报告
# 每周一早上 9 点生成周报
/cron add 周报生成 --schedule "0 9 * * 1" --command "/report generate --type weekly --format html"
# 每月 1 号生成月报
/cron add 月报生成 --schedule "0 9 1 * *" --command "/report generate --type monthly --format pdf"
# 发送到指定频道
/cron set 周报生成 --output slack:reports
4. 定期系统维护
# 每周日凌晨清理临时文件
/cron add 清理临时文件 --schedule "0 3 * * 0" --command "/system cleanup --temp"
# 每月更新索引
/cron add 更新索引 --schedule "0 2 1 * *" --command "/memory index rebuild"
# 每天检查磁盘空间
/cron add 磁盘检查 --schedule "0 6 * * *" --command "/system check disk --threshold 80"
5. 定期提醒事项
# 每天早上 9 点提醒查看待办事项
/cron add 待办提醒 --schedule "0 9 * * *" --command "/memory search --tags todo --limit 10"
# 每周五下午 5 点提醒提交周报
/cron add 周报提醒 --schedule "0 17 * * 5" --command "/message send 你该提交周报了!"
# 每月 1 号提醒更新订阅
/cron add 订阅更新提醒 --schedule "0 9 1 * *" --command "/message send 记得更新订阅服务"
Cron 高级功能
任务依赖
# 创建主任务
/cron add 数据备份 --schedule "0 2 * * *" --command "/backup create"
# 创建依赖任务(备份完成后执行)
/cron add 备份验证 --schedule "" --command "/backup verify" --depends-on 数据备份
# 创建通知任务(验证完成后通知)
/cron add 备份通知 --schedule "" --command "/notify send 备份成功" --depends-on 备份验证
任务重试策略
# 创建带重试的任务
/cron add 数据同步 --schedule "*/30 * * * *" --command "/sync run" --retry 3 --retry-delay 60
# 查看重试配置
/cron show 数据同步
任务超时处理
# 设置任务超时
/cron add 长任务 --schedule "0 2 * * *" --command "/longtask run" --timeout 3600
# 超时后的操作
/cron set 长任务 --on-timeout notify --on-timeout-cmd "/alert 任务超时"
条件执行
# 只在工作日执行
/cron add 工作日检查 --schedule "0 9 * * 1-5" --command "/workday check"
# 在特定条件下执行
/cron add 条件备份 --schedule "0 2 * * *" --command "/backup conditional --if-online"
并发控制
# 设置任务并发数
/cron add 批量处理 --schedule "0 */2 * * *" --command "/batch process --parallel 5"
# 限制同一任务并发
/cron add 数据导入 --schedule "0 3 * * *" --command "/import data" --max-concurrent 1
Cron 和 Skills 集成
调用 Skills 作为任务
# 使用 blog_publish skill 定期发布文章
/cron add 文章发布 --schedule "0 10 * * *" --command "/skill blog_publish --auto-draft"
# 使用 code_review skill 定期代码审查
/cron add 代码审查 --schedule "0 18 * * 1-5" --command "/skill code_review --branch main"
自定义 Cron Skill
在 active_skills/cron/SKILL.md 中定义自定义任务:
# 自定义 Cron Skill
## 示例:每周数据清理
创建任务:
bash
/cron add 每周清理 --schedule "0 3 0" --command "/skill data_cleanup --days 7"
清理逻辑:
1. 清理过期日志
2. 清理临时文件
3. 清理缓存数据
4. 生成清理报告
Cron 监控和通知
监控任务执行
# 启用任务监控
/config set cron.monitoring.enabled true
# 设置监控间隔
/config set cron.monitoring.interval 60
# 保存配置
/config save
# 查看监控状态
/cron monitor status
配置通知
# 任务失败时通知
/cron set 数据备份 --notify-on-failure true --notify-channel slack:alerts
# 任务成功时通知
/cron set 数据备份 --notify-on-success true --notify-channel telegram
# 超时时通知
/cron set 长任务 --notify-on-timeout true --notify-channel email
任务统计
# 查看任务统计
/cron stats
# 查看任务成功率
/cron stats --success-rate
# 查看平均执行时间
/cron stats --avg-duration
Cron 最佳实践
1. 合理设置任务时间
# ❌ 不好:所有任务都在整点执行
0 0 * * * /task1
0 0 * * * /task2
# ✅ 好:错开任务执行时间
0 0 * * * /task1
0 5 * * * /task2
2. 使用标签组织任务
# 为任务添加标签
/cron add 数据备份 --schedule "0 2 * * *" --command "/backup" --tags backup,daily
/cron add 日志清理 --schedule "0 3 * * 0" --command "/cleanup" --tags maintenance,weekly
# 按标签查询
/cron list --tags backup
/cron list --tags weekly
3. 设置合理的超时时间
# 根据任务特性设置超时
/cron add 快速检查 --schedule "*/10 * * * *" --command "/check" --timeout 30
/cron add 数据备份 --schedule "0 2 * * *" --command "/backup" --timeout 3600
4. 定期检查任务状态
# 创建监控任务
/cron add Cron监控 --schedule "0 9 * * 1" --command "/cron status --email admin@example.com"
# 查看失败任务
/cron list --status failed
5. 合并相似任务
# ❌ 不好:多个独立任务
/cron add 检查邮件 --schedule "*/30 * * * *" --command "/mail check"
/cron add 检查日历 --schedule "*/30 * * * *" --command "/calendar check"
/cron add 检查通知 --schedule "*/30 * * * *" --command "/notify check"
# ✅ 好:合并为一个任务
/cron add 定期检查 --schedule "*/30 * * * *" --command "/check all --mail --calendar --notify"
Cron 故障排查
Q1: 任务没有按时执行?
检查步骤:
# 1. 检查任务状态
/cron show <任务ID>
# 2. 检查 Cron 服务是否运行
/cron status
# 3. 查看日志
/cron logs <任务ID>
# 4. 检查时区设置
/config get cron.timezone
Q2: 任务执行失败?
排查方法:
# 查看详细日志
/cron logs <任务ID> --verbose
# 手动执行命令测试
<command>
# 检查重试配置
/cron show <任务ID>
Q3: 任务执行时间不对?
常见原因:
# 1. 时区设置错误
/config set cron.timezone Asia/Shanghai
# 2. Cron 表达式错误
# 验证表达式
/cron validate "0 9 * * 1-5"
# 3. 系统时间不准确
/system check time
Q4: 任务占用资源过多?
解决方案:
# 1. 限制并发任务数
/config set cron.max_concurrent_tasks 3
# 2. 设置任务超时
/cron set <任务ID> --timeout 300
# 3. 限制资源使用
/cron set <任务ID> --max-memory 512MB --max-cpu 50%
Q5: 如何调试 Cron 任务?
# 启用调试模式
/cron set <任务ID> --debug true
# 手动触发执行
/cron run <任务ID>
# 查看详细输出
/cron logs <任务ID> --debug
Cron vs 心跳 (Heartbeat)
使用场景对比
| 场景 | 推荐方式 | 原因 |
|------|---------|------|
| 精确时间任务 | Cron | 需要精确时间控制 |
| 多项合并检查 | Heartbeat | 节省 API 调用 |
| 独立后台任务 | Cron | 不依赖上下文 |
| 上下文相关检查 | Heartbeat | 需要对话上下文 |
Heartbeat 配置示例
创建 HEARTBEAT.md:
# Heartbeat 清单
## 每次触发时执行
1. 检查未读邮件
- 有重要邮件 → 总结并发送通知
2. 检查今日日程
- 有重要会议 → 提前 30 分钟提醒
3. 检查待办事项
- 高优先级 → 推送到 Telegram
## 每周执行
1. 整理 Memory
- 归档旧的每日笔记
- 更新长期记忆
2. 生成周报
- 统计本周活动
- 发送到 Slack
总结
通过本教程,你应该已经掌握了:
- ✅ Cron 系统的基本概念
- ✅ Cron 表达式语法
- ✅ 任务管理(创建、查询、暂停、删除)
- ✅ 高级功能(依赖、重试、超时)
- ✅ Cron 和 Skills 集成
- ✅ 监控和通知
- ✅ 最佳实践和故障排查
- ✅ Cron vs Heartbeat 的选择
下一章
在下一章中,我们将学习 CoPaw MCP (Model Context Protocol) 集成,了解如何连接外部工具和服务。




