在日常工作中,我们经常需要处理各种重复性的定时任务:每天生成报告、定时备份数据、定时检查系统状态等。FastClaw 内置了强大的 Cron 调度系统,让这些重复性工作变得简单自动化。
什么是 Cron?
Cron 是一个经典的时间调度工具,使用 cron 表达式来定义任务执行时间。FastClaw 将这个概念引入到 AI Agent 中,让你可以用自然语言来定义和管理定时任务。
Cron 表达式基础
FastClaw 使用标准的 5 位 cron 表达式:
┌───────────── 分钟 (0-59)
│ ┌───────────── 小时 (0-23)
│ │ ┌───────────── 日 (1-31)
│ │ │ ┌───────────── 月 (1-12)
│ │ │ │ ┌───────────── 周 (0-7, 0 和 7 都是周日)
│ │ │ │ │
* * * * *
常用 Cron 表达式示例
| 表达式 | 含义 | 使用场景 |
|---|---|---|
*/5 * * * * | 每 5 分钟 | 实时监控、数据采集 |
0 * * * * | 每小时整点 | 整点报告、资源清理 |
0 9 * * * | 每天 9:00 | 晨会报告、日报生成 |
0 9,18 * * * | 每天 9:00 和 18:00 | 早晚报告 |
0 9 * * 1-5 | 工作日 9:00 | 工作日日报 |
30 4 * * 0 | 每周日凌晨 4:30 | 周报生成、备份 |
0 0 1 * * | 每月第一天 | 月度报告 |
*/15 9-17 * * 1-5 | 工作日 9-17 点每 15 分钟 | 工作时间监控 |
快速开始
启动 Cron 服务
FastClaw 的 Cron 服务默认随主服务启动:
# 启动服务(包含 Cron 服务)
python main.py start
# 查看 Cron 任务列表
python main.py cron list
创建你的第一个定时任务
通过 Web UI 创建
- 打开 http://localhost:8765
- 切换到 Cron 标签页
- 点击 新建任务
- 填写任务信息:
- 任务名称: 每日天气播报
- Cron 表达式:
0 8 * * * - Agent: main_agent
- 命令: 查询北京天气并保存到文件
- 点击 保存
通过配置文件创建
编辑 workspace/data/cron/tasks.json:
{
"tasks": [
{
"name": "每日天气播报",
"cron": "0 8 * * *",
"agent": "main_agent",
"session_id": "weather_report",
"command": "查询北京天气并保存到 workspace/weather_report.txt",
"enabled": true
}
]
}
实战案例
案例 1:自动化数据备份
需求
每天凌晨 2 点自动备份重要数据到指定目录。
实现
{
"name": "每日数据备份",
"cron": "0 2 * * *",
"agent": "main_agent",
"session_id": "backup_task",
"command": "创建备份:将 workspace/data 目录备份到 workspace/backups/backup_$(date +%Y%m%d).tar.gz",
"enabled": true
}
任务执行过程
当 FastClaw 执行这个任务时,它会:
- 触发
cron.triggered事件 - Agent 解析命令:"创建备份:将 workspace/data 目录备份到..."
- Agent 调用
run_shell执行备份命令:mkdir -p workspace/backups tar -czf workspace/backups/backup_$(date +%Y%m%d).tar.gz workspace/data - 将执行结果保存到日志
案例 2:定时生成工作日报
需求
每个工作日下班前(18:00)自动生成工作日报。
实现
{
"name": "工作日报生成",
"cron": "0 18 * * 1-5",
"agent": "main_agent",
"session_id": "daily_report",
"command": "帮我总结今天的工作内容,生成一份简洁的工作日报并保存到 workspace/reports/daily_$(date +%Y%m%d).md",
"enabled": true
}
任务执行过程
- 触发
cron.triggered事件 - Agent 理解任务:"总结今天工作,生成日报"
- Agent 可能会:
- 读取今天的聊天记录和工作文件
- 分析工作内容
- 生成总结报告
- 保存到指定文件
案例 3:系统健康检查
需求
每 15 分钟检查一次系统资源使用情况,异常时告警。
实现
{
"name": "系统健康检查",
"cron": "*/15 * * * *",
"agent": "main_agent",
"session_id": "health_check",
"command": "检查系统资源:如果 CPU > 90% 或 内存 > 85%,发送告警到 feishu;否则记录正常状态到 workspace/logs/health_$(date +%Y%m%d_%H%M).log",
"enabled": true
}
告警逻辑
Agent 会自动判断是否需要告警:
- 正常状态:资源使用率正常 → 记录日志
- 告警状态:资源使用率过高 → 调用
run_skills("feishu", {...})发送飞书消息
案例 4:定时新闻资讯汇总
需求
每天早上 8 点自动抓取技术新闻并生成资讯简报。
实现
{
"name": "技术资讯早报",
"cron": "0 8 * * *",
"agent": "main_agent",
"session_id": "tech_news",
"command": "抓取最新的 AI/编程技术新闻,生成一份资讯简报保存到 workspace/news/tech_daily_$(date +%Y%m%d).md",
"enabled": true
}
执行步骤
run_shell("curl https://news.example.com/tech.rss")- 抓取 RSS 源- 解析新闻内容
- 生成简报格式
- 保存到文件
案例 5:定时数据库同步
需求
每小时同步一次数据库到备份服务器。
实现
{
"name": "数据库定时同步",
"cron": "0 * * * *",
"agent": "main_agent",
"session_id": "db_sync",
"command": "执行数据库同步:将本地数据库导出并同步到远程备份服务器 192.168.1.100 的 /backup/db/ 目录",
"enabled": true
}
同步脚本
Agent 可能会执行:
mysqldump -u root -p密码 fastclaw_db > backup.sql
scp backup.sql user@192.168.1.100:/backup/db/
任务管理命令
查看任务列表
python main.py cron list
输出示例:
任务名称 Cron 表达式 状态 上次执行
--------------------------------------------------------------
每日天气播报 0 8 * * * 启用 2024-01-15 08:00:00
每日数据备份 0 2 * * * 启用 2024-01-15 02:00:00
工作日报生成 0 18 * * 1-5 启用 2024-01-15 18:00:00
系统健康检查 */15 * * * * 启用 2024-01-15 10:45:00
手动触发任务
# 立即执行指定任务
python main.py cron run 每日天气播报
# 立即执行所有任务
python main.py cron run --all
启用/禁用任务
# 禁用任务
python main.py cron disable 每日天气播报
# 启用任务
python main.py cron enable 每日天气播报
删除任务
python main.py cron del 每日天气播报
任务日志和监控
查看执行日志
# 查看最近日志
tail -f workspace/data/cron/logs/fastclaw_cron.log
# 查看特定任务的日志
cat workspace/data/cron/logs/tasks/每日天气播报.log
日志格式
2024-01-15 08:00:00 [INFO] 任务触发: 每日天气播报
2024-01-15 08:00:01 [INFO] 执行命令: 查询北京天气并保存到 workspace/weather_report.txt
2024-01-15 08:00:03 [INFO] 执行结果: 成功
2024-01-15 08:00:03 [INFO] 执行耗时: 2.3s
设置告警通知
在 workspace/data/settings.json 中配置:
{
"cron": {
"on_failure": "notify",
"notification_channel": "feishu",
"retry_times": 3,
"retry_interval": 60
}
}
高级用法
1. 任务依赖链
创建依赖链,让一个任务执行完成后触发下一个任务:
{
"name": "任务A:数据采集",
"cron": "0 9 * * *",
"agent": "main_agent",
"session_id": "task_a",
"command": "采集昨日销售数据并保存到 workspace/data/sales_raw.json",
"enabled": true
},
{
"name": "任务B:数据分析",
"cron": "0 10 * * *",
"agent": "main_agent",
"session_id": "task_b",
"command": "读取 workspace/data/sales_raw.json,进行数据分析并生成报告",
"enabled": true
}
2. 条件执行
使用自然语言让 Agent 自主判断是否执行:
{
"name": "智能备份",
"cron": "0 2 * * *",
"agent": "main_agent",
"session_id": "smart_backup",
"command": "检查今日是否有重要更新,如有则执行备份;否则跳过并记录:今天无需备份",
"enabled": true
}
3. 循环任务
创建间隔执行的循环任务:
{
"name": "长时任务监控",
"cron": "*/30 * * * *",
"agent": "main_agent",
"session_id": "monitor",
"command": "检查之前启动的构建任务状态,如完成则发送通知并记录结果",
"enabled": true
}
4. 上下文保持
长任务可以跨会话保持上下文:
{
"name": "大文件处理",
"cron": "0 3 * * *",
"agent": "main_agent",
"session_id": "big_file_task",
"session_persistence": true,
"command": "继续处理上次未完成的大文件分析任务",
"enabled": true
}
最佳实践
1. 任务设计原则
- 单一职责:每个任务只做一件事
- 幂等性:任务可以安全地重复执行
- 快速执行:避免单个任务执行时间过长
- 清晰日志:记录足够的执行信息便于排查
2. 时间规划建议
| 任务类型 | 推荐时间 | 原因 |
|---|---|---|
| 数据备份 | 凌晨 2-4 点 | 系统负载最低 |
| 日报生成 | 下班前 1 小时 | 工作内容完整 |
| 健康检查 | 工作时间 | 及时发现问题 |
| 数据同步 | 整点 | 便于对齐 |
| 报表生成 | 早上 8-9 点 | 上班前准备就绪 |
3. 资源优化
- 错峰执行:避免多个任务同时执行
- 合并任务:将相关小任务合并
- 增量处理:优先处理增量数据
4. 监控告警
- 关键任务:必须设置失败告警
- 普通任务:记录日志即可
- 长时任务:定期检查进度
故障排除
任务未执行
- 检查任务是否启用:
python main.py cron list - 检查 Cron 服务是否运行:
ps aux | grep fastclaw - 查看系统日志:
journalctl -u fastclaw - 检查 cron 表达式是否正确
任务执行失败
- 查看任务日志:
cat workspace/data/cron/logs/tasks/任务名.log - 手动执行测试:
python main.py cron run 任务名 - 检查 Agent 配置:
vim workspace/data/agents/main_agent/metadata.json - 确认 LLM API 可用
任务执行超时
默认任务超时时间为 5 分钟。如果任务需要更长时间,可以在配置中调整:
{
"cron": {
"task_timeout": 600
}
}
总结
FastClaw 的 Cron 定时任务系统让自动化工作变得简单而强大。通过自然语言交互,你可以:
- 轻松创建:用自然语言描述任务,无需编写代码
- 灵活调度:支持各种 cron 表达式,满足复杂时间需求
- 智能执行:Agent 自主决策,复杂逻辑也能 handle
- 完善日志:详细的执行记录,便于追踪和排查
- 告警通知:任务失败时自动通知,及时处理问题
无论是个人用户还是企业用户,都可以通过 FastClaw 的 Cron 功能实现工作自动化,把重复性的工作交给 AI,专注于更有价值的事情。
相关资源
- GitHub: github.com/kandada/fas…
- Cron 表达式生成器: crontab.guru/
- 配置示例: 参考
workspace/data/cron/tasks.json
现在开始你的自动化之旅吧!