FastClaw 实战:用 Cron 定时任务自动化你的工作

7 阅读8分钟

在日常工作中,我们经常需要处理各种重复性的定时任务:每天生成报告、定时备份数据、定时检查系统状态等。FastClaw 内置了强大的 Cron 调度系统,让这些重复性工作变得简单自动化。

什么是 Cron?

Cron 是一个经典的时间调度工具,使用 cron 表达式来定义任务执行时间。FastClaw 将这个概念引入到 AI Agent 中,让你可以用自然语言来定义和管理定时任务。

Cron 表达式基础

FastClaw 使用标准的 5 位 cron 表达式:

┌───────────── 分钟 (0-59)
│ ┌───────────── 小时 (0-23)
│ │ ┌───────────── 日 (1-31)
│ │ │ ┌───────────── 月 (1-12)
│ │ │ │ ┌───────────── 周 (0-7, 07 都是周日)
│ │ │ │ │
* * * * *

常用 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 创建

  1. 打开 http://localhost:8765
  2. 切换到 Cron 标签页
  3. 点击 新建任务
  4. 填写任务信息:
    • 任务名称: 每日天气播报
    • Cron 表达式: 0 8 * * *
    • Agent: main_agent
    • 命令: 查询北京天气并保存到文件
  5. 点击 保存

通过配置文件创建

编辑 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 执行这个任务时,它会:

  1. 触发 cron.triggered 事件
  2. Agent 解析命令:"创建备份:将 workspace/data 目录备份到..."
  3. Agent 调用 run_shell 执行备份命令:
    mkdir -p workspace/backups
    tar -czf workspace/backups/backup_$(date +%Y%m%d).tar.gz workspace/data
    
  4. 将执行结果保存到日志

案例 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
}

任务执行过程

  1. 触发 cron.triggered 事件
  2. Agent 理解任务:"总结今天工作,生成日报"
  3. 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
}

执行步骤

  1. run_shell("curl https://news.example.com/tech.rss") - 抓取 RSS 源
  2. 解析新闻内容
  3. 生成简报格式
  4. 保存到文件

案例 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. 监控告警

  • 关键任务:必须设置失败告警
  • 普通任务:记录日志即可
  • 长时任务:定期检查进度

故障排除

任务未执行

  1. 检查任务是否启用:python main.py cron list
  2. 检查 Cron 服务是否运行:ps aux | grep fastclaw
  3. 查看系统日志:journalctl -u fastclaw
  4. 检查 cron 表达式是否正确

任务执行失败

  1. 查看任务日志:cat workspace/data/cron/logs/tasks/任务名.log
  2. 手动执行测试:python main.py cron run 任务名
  3. 检查 Agent 配置:vim workspace/data/agents/main_agent/metadata.json
  4. 确认 LLM API 可用

任务执行超时

默认任务超时时间为 5 分钟。如果任务需要更长时间,可以在配置中调整:

{
  "cron": {
    "task_timeout": 600
  }
}

总结

FastClaw 的 Cron 定时任务系统让自动化工作变得简单而强大。通过自然语言交互,你可以:

  1. 轻松创建:用自然语言描述任务,无需编写代码
  2. 灵活调度:支持各种 cron 表达式,满足复杂时间需求
  3. 智能执行:Agent 自主决策,复杂逻辑也能 handle
  4. 完善日志:详细的执行记录,便于追踪和排查
  5. 告警通知:任务失败时自动通知,及时处理问题

无论是个人用户还是企业用户,都可以通过 FastClaw 的 Cron 功能实现工作自动化,把重复性的工作交给 AI,专注于更有价值的事情。

相关资源

现在开始你的自动化之旅吧!