D4 · 生态连接

自动化任务(Automations):定时任务与 RRULE 调度

2026-07-27

WorkBuddy 的自动化任务(Automations)让 AI 从"随叫随到"升级为"不叫也到"。你可以设定规则,让 WorkBuddy 在指定时间、特定事件触发时自动执行任务,无需人工干预。无论是每天早上的日报生成、每小时的系统巡检,还是 Git Push 时的自动部署,Automations 都能精准调度。本文将详解定时任务的创建、RRULE 调度规则、有效期设置,并提供丰富的实战示例。

自动化任务架构

WorkBuddy 的自动化系统由三个核心组件构成:

📅定时任务创建

基本结构

一个自动化任务的定义包含以下要素:

{
  "name": "每日站会摘要",
  "description": "每天早上9点汇总昨日工作进展",
  "schedule": {
    "type": "rrule",
    "rule": "FREQ=DAILY;BYHOUR=9;BYMINUTE=0"
  },
  "action": {
    "prompt": "读取昨日 Git 提交记录和钉钉消息,生成站会摘要,发送到企业微信群",
    "mode": "craft"
  },
  "validFrom": "2026-07-27T00:00:00+08:00",
  "validTo": "2026-12-31T23:59:59+08:00",
  "timezone": "Asia/Shanghai",
  "notification": {
    "onSuccess": "dingtalk",
    "onFailure": "email"
  },
  "retry": {
    "maxAttempts": 3,
    "interval": 300
  }
}

通过对话创建

最简单的方式是直接用自然语言描述:

帮我创建一个自动化任务:
- 名称:每日数据备份
- 时间:每天凌晨2点
- 操作:将 MySQL 数据库导出并上传到腾讯云 COS
- 有效期:从今天到年底
- 失败时发邮件通知我

WorkBuddy 会自动将自然语言转换为结构化的任务定义,并让你确认后创建。

通过配置文件创建

.workbuddy/automations/ 目录下创建 YAML 文件:

name: 周报生成
description: 每周五下午5点生成本周工作周报
schedule:
  type: rrule
  rule: "FREQ=WEEKLY;BYDAY=FR;BYHOUR=17;BYMINUTE=0"
action:
  prompt: |
    1. 从 GitHub 拉取本周所有 PR 和 Commit
    2. 从 Jira 获取已完成的 Issue
    3. 汇总生成本周工作周报
    4. 写入腾讯文档并分享给团队
  mode: craft
validFrom: "2026-07-27T00:00:00+08:00"
validTo: "2026-12-31T23:59:59+08:00"
timezone: Asia/Shanghai
notification:
  onSuccess: feishu
  onFailure: email

🔄RRULE 调度规则详解

WorkBuddy 采用 iCalendar RRULE(RFC 5545)作为调度规则标准,比传统 Cron 表达式更强大、更语义化:

基础频率

🕐

每小时

FREQ=HOURLY

适合:监控巡检、数据同步

📅

每天

FREQ=DAILY;BYHOUR=9

适合:日报、备份、摘要

📆

每周

FREQ=WEEKLY;BYDAY=MO,WE,FR

适合:周报、定期审查

🗓️

每月

FREQ=MONTHLY;BYMONTHDAY=1

适合:月报、账单、考核

高级规则示例

# 每个工作日早上9点(跳过周末)
FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR;BYHOUR=9;BYMINUTE=0

# 每月1号和15号上午10点(双周节奏)
FREQ=MONTHLY;BYMONTHDAY=1,15;BYHOUR=10

# 每2小时一次
FREQ=HOURLY;INTERVAL=2

# 每季度最后一天
FREQ=MONTHLY;BYMONTH=3,6,9,12;BYMONTHDAY=-1

# 每周一三五的8:30和17:30(早晚各一次)
FREQ=WEEKLY;BYDAY=MO,WE,FR;BYHOUR=8,17;BYMINUTE=30

RRULE vs Cron 对比

RRULE(推荐)

  • 语义清晰:FREQ=WEEKLY;BYDAY=FR 一目了然
  • 支持 INTERVAL:每 N 天/周/月
  • 支持工作日:BYDAY 自动跳过周末
  • 时区感知:配合 VTIMEZONE 处理夏令时
  • 行业标准:RFC 5545,与日历系统互通

Cron 表达式

  • 简洁紧凑:0 9 * * 1-5
  • Unix 生态广泛支持
  • 不支持 INTERVAL(需手动计算)
  • 不原生支持"每月最后一天"
  • 时区依赖系统设置

WorkBuddy 同时支持两种格式。对于简单场景,Cron 更简洁;对于复杂调度规则(工作日、间隔、月末等),RRULE 更强大。

有效期设置

每个自动化任务可以设置有效期,避免过期任务持续运行:

{
  "validFrom": "2026-08-01T09:00:00+08:00",
  "validTo": "2026-10-31T18:00:00+08:00",
  "maxExecutions": 100
}

🔀条件分支与错误处理

条件分支

任务可以根据执行结果走不同分支:

name: 系统巡检
schedule:
  type: rrule
  rule: "FREQ=HOURLY"
action:
  prompt: |
    执行以下巡检步骤:
    1. 检查 MySQL 慢查询数量
    2. 检查 Redis 内存使用率
    3. 检查 API 响应时间 P99
  onSuccess: |
    所有指标正常,记录到日志即可
  onFailure: |
    发现异常!立即:
    1. 生成详细诊断报告
    2. 发送告警到企业微信群
    3. 如果是数据库问题,自动创建 Jira Issue

重试策略

{
  "retry": {
    "maxAttempts": 3,
    "interval": 300,
    "backoff": "exponential",
    "maxInterval": 3600
  }
}

支持固定间隔(fixed)和指数退避(exponential)两种重试策略。指数退避下,重试间隔为 300s → 600s → 1200s,避免雪崩。

📋典型示例

📊 每日数据报告

调度:每天 9:00
操作:查询数据库 → 生成图表 → 写入腾讯文档 → 推送飞书
有效期:长期运行

🔍 每小时健康巡检

调度:每小时
操作:检查服务状态 → 异常则告警 → 正常则静默
重试:3次,指数退避

🚀 Git Push 自动部署

调度:事件触发(GitHub Webhook)
操作:拉取代码 → 构建 → 部署 → 验证 → 通知
有效期:项目周期内

📝 双周 Sprint 回顾

调度:每两周周五 16:00
操作:汇总 Sprint 数据 → 生成回顾文档 → 创建飞书文档
有效期:本季度

📊任务管理与监控

WorkBuddy 提供自动化任务管理面板,支持:

也可以通过对话管理任务:

列出所有自动化任务
暂停"每日数据备份"任务
查看"系统巡检"最近5次执行结果
修改"周报生成"的调度时间为每周四下午4点

📚 参考资料

💬 你对 WorkBuddy 有什么疑问?或者已经在用了,有什么心得想分享?欢迎在下方留言讨论!