首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >WorkBuddy 自动化 RRULE 调度 Bug:BYDAY 限制失效导致每日执行

WorkBuddy 自动化 RRULE 调度 Bug:BYDAY 限制失效导致每日执行

原创
作者头像
用户12577559
发布于 2026-06-23 11:32:10
发布于 2026-06-23 11:32:10
3480
举报

一、问题概述

配置了一个按 RRULE 规则只在每周一 09:00 执行的自动化任务,但实际运行中在周二也触发了执行,且调度器计算的下一次执行时间竟然是周三,BYDAY=MO 的限制完全失效。

二、环境信息

项目

详情

WorkBuddy 平台

macOS Desktop 客户端

自动化名称

App Store 教育榜周报(每周一 09:00)

自动化 ID

automation-1782095024956

RRULE 配置

FREQ=WEEKLY;BYDAY=MO;BYHOUR=9;BYMINUTE=0;BYSECOND=0

期望行为

每周一 09:00 执行一次

实际行为

周一执行后,周二又执行了一次,下次执行显示周三

三、复现步骤

  1. 创建一个新的自动化任务,scheduleType 设为 recurring
  2. RRULE 设置为:RRULE:FREQ=WEEKLY;BYDAY=MO;BYHOUR=9;BYMINUTE=0;BYSECOND=0
  3. 保存并激活自动化
  4. 首次运行正常在周一触发
  5. 次日(周二)观察,自动化再次在 09:10 左右触发

四、关键证据

4.1 自动化配置(正常)

代码语言:yaml
复制
name: App Store 教育榜周报(每周一 09:00)
status: ACTIVE
scheduleType: recurring
rrule: RRULE:FREQ=WEEKLY;BYDAY=MO;BYHOUR=9;BYMINUTE=0;BYSECOND=0

4.2 实际执行记录(异常)

执行时间

星期

是否符合预期

2026-06-22 11:28

周一

✅ 首次创建时触发(非 RRULE 调度)

2026-06-23 09:14

周二

❌ 不应执行

2026-06-24 08:50(预期)

周三

❌ next_run_at 仍然不对

4.3 数据库验证

直接从 ~/.workbuddy/workbuddy.db 查询:

代码语言:sql
复制
SELECT last_run_at, next_run_at FROM automation_runtime_state
WHERE automation_id = 'automation-1782095024956';

结果:

代码语言:bash
复制
last_run_at: 1782177276881  →  2026-06-23 09:14:36 (周二) ❌
next_run_at: 1782262200000  →  2026-06-24 08:50:00 (周三) ❌

4.4 日志证据

代码语言:bash
复制
[2026-06-22 Mon 11:28] 首次运行成功(手动/创建触发)
[2026-06-23 Tue 09:10] 调度器自动触发运行  ← 不应触发
[2026-06-24 Wed 08:50] 下次计划运行        ← next_run_at 仍有误

五、问题分析

  1. BYDAY=MO 限制失效:RRULE 中明确指定只在周一执行,但调度器实际在周二触发了执行
  2. next_run_at 计算错误:当前时间为周二,按 RRULE 下次执行应为下周一(06-29),但数据库显示为周三(06-24)
  3. 时间偏移:配置 BYHOUR=9,但实际触发在 09:14,next_run_at 显示 08:50,存在约 10 分钟偏差,疑似时区处理问题(UTC+8 vs UTC+0)
  4. 根本猜测:调度引擎在解析包含 BYHOUR/BYMINUTE/BYSECOND 的 WEEKLY+BYDAY 规则时,可能错误地忽略了 BYDAY 限制,导致退化为"每天 BYHOUR 时间执行"

六、影响范围

  • 所有使用 WEEKLY + BYDAY + BYHOUR 组合 RRULE 的自动化任务都可能受到影响
  • 会导致远超预期的执行次数,浪费积分额度
  • 对于涉及外部 API 调用、邮件发送等有副作用的自动化,可能造成骚扰或资源浪费

七、临时规避方案

在平台修复前,只能手动暂停自动化(status = PAUSED),等到周一再手动激活。但这失去了自动化的意义。

八、建议修复方向

  1. 检查 RRULE 解析器中 BYDAY 与 WEEKLY 频率的组合逻辑
  2. 确认 DTSTART 的时区处理是否正确
  3. 自动化创建后的首次调度是否引入了偏移
  4. 建议增加调度预览功能,让用户能看到未来 5 次执行时间,便于提前发现此类问题

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

目录
  • 一、问题概述
  • 二、环境信息
  • 三、复现步骤
  • 四、关键证据
    • 4.1 自动化配置(正常)
    • 4.2 实际执行记录(异常)
    • 4.3 数据库验证
    • 4.4 日志证据
  • 五、问题分析
  • 六、影响范围
  • 七、临时规避方案
  • 八、建议修复方向
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档