问题
已受理

定时任务说“工作日”,法定假期和调休该怎么告诉 Buda?

QiangDiao Li

想让 Buda 在北京时间的工作日早上整理一份简报。文档里看到排期可以设时区,但还有一个日历问题。

如果只按周一到周五,遇到法定假期和周末调休就不一定对。大家会给它一份工作日历,让任务开始时先判断,还是提前手动调整排期?

主要想把规则说准确,不默认它知道我们团队哪天上班。

举报
Paylm feng
团队

更推荐 「每天定时触发 + 任务开始时拉取公开节假日数据(或团队日历)先判断」,不用每次节前手动改排期。

原因是 Buda 定时任务的底层调度使用标准 Cron 表达式(配合 Asia/Shanghai 时区),而标准 Cron 只能表达“周一到周五(1-5)”,没法识别法定节假日和周末调休:如果只按周一到周五排期,遇到周末调休补班那天,任务根本不会触发。

可以按下面两步把规则配置好:

1. 排期设为「每天」早上固定时间触发

创建定时任务时,把排期设为每天早上触发(例如 0 9 * * *,时区 Asia/Shanghai),而不是仅周一至周五。这样周末调休上班那天也会准时启动检查。

2. 在任务开始时用公开在线节假日 JSON + 团队例外规则判断

  • 按国家法定节假日与调休走:可以直接让 Agent 请求公开的法定节假日在线 JSON(例如开源库 NateScarlet/holiday-cn 的 CDN 地址 https://fastly.jsdelivr.net/gh/NateScarlet/holiday-cn@master/{年份}.json,其中 days 数组里 isOffDay: true 代表法定放假、isOffDay: false 代表周末调休补班)。
  • 如果团队还有自定义排休(如司庆、年会调休):可以在网盘额外放一份简单的 /agent/config/team-calendar.json 作为最高优先级覆盖。

可以直接在定时任务的执行指令(Prompt)开头写明规则:

1. 先按 Asia/Shanghai 时区获取今天日期(YYYY-MM-DD)和星期;
2. 请求公开节假日数据 https://fastly.jsdelivr.net/gh/NateScarlet/holiday-cn@master/{当年年份}.json(若网盘有 /agent/config/team-calendar.json 团队自定义排休则优先匹配);
3. 判断今天是否为工作日:
- 若命中 days 中的当前日期:isOffDay: true 为非工作日,isOffDay: false 为调休工作日;
- 若未命中节假日特殊日期:周一至周五为工作日,周六、周日为非工作日;
4. 如果今天是非工作日,不要整理简报、也不要向渠道发送任何消息,直接回复 NO_REPLY 静默结束;只有确认为工作日时,才执行简报整理与推送。

这样既不需要手动维护全年法定节假日和调休,也不会出现 Agent 自己瞎猜哪天上班的情况。

举报

你的回复

登录后参与讨论。阅读始终开放,只有发帖和回复需要账号。

登录