- 预审中
- 2 预审不通过
【功能建议】【微信群OfficeAce】平台侧的修复需要等版本更新 预审不通过 编辑 删除
- 智果(AgentArts)智能体平台
- 开天aPaaS
v0.5.0试用
定时任务双重触发。(待确认问题)链接: https://pan.baidu.com/s/1k5Fj8fGQrnMsf40V99Hxjg
用户反馈定时任务「进化引擎巡检」仍然双次触发。我先查一下定时任务配置,排查原因。从定时任务列表看,进化引擎巡检只注册了一个任务(dyn-1782869666989-8ntjeo),cron表达式 0 12 * * * 没问题。让我进一步排查触发记录。现在我有完整的诊断结果了。
进化引擎巡检双次触发——根因分析
现象
触发 时间(Shanghai) 消息ID 处理结果
第1次 11:59:51.358 ...391358... 完整执行巡检(12:00-12:04)
第2次 12:00:00.015 ...400015... 发现已完成,确认状态后返回
间隔 8.7秒,两次都是 wake 事件(agent触发),不是 push 事件(结果推送)。
排查链
1. 任务配置没问题 — 只注册了一个任务 dyn-1782869666989-8ntjeo,cron 0 12 * * *,无重复注册。
2. runStats 证实未拦截 — total:6, delivered:6, skipped:0,重叠防护(SKIP_OVERLAP)一次都没生效。
3. 根因在调度器 reload() 竞态
读了 jiuwenclaw/gateway/cron/scheduler.py,调度流程是:
复制
reload() → 为每个job调度两个事件:
wake事件 (push_dt - wake_offset_seconds) ← 提前唤醒agent开始干活
push事件 (push_dt) ← 到点推送结果
wake_offset_seconds 默认60秒(cron_json_convert.py:121),所以:
wake 事件预定在 11:59:00 触发
push 事件预定在 12:00:00 触发
竞态窗口:wake 触发后到 push 触发前,有约60秒窗口。这期间如果 cron_jobs.json 文件被修改(任何任务的增删改都会触发),_check_store_changed() 每5秒轮询一次文件 mtime,检测到变化后调用 reload():
复制
# reload() 第169行
self._events.clear() # ← 清掉所有事件(包括还没到点的push)
# 然后重新计算下一个cron时间 → 仍然是12:00:00
# 重新调度 wake + push → 新wake时间可能已过期 → 立即触发
4. 去重守卫失效
_on_wake() 有去重守卫(第345行):
复制
if run_id in self._run_tasks and not self._run_tasks[run_id].done():
return # ← 同一run_id还在跑,跳过
但 send_request() 是非阻塞的——发出请求后 task 很快就完成了(agent实际处理在另一侧异步进行)。等第二次 wake 触发时,self._run_tasks[run_id].done() 已经是 True,守卫放行,导致第二次触发。
结论
层面 说明
根因 reload() 清空事件队列后重新调度,为同一cron周期生成第二个wake事件
守卫失效 去重基于 task.done(),但 send_request 非阻塞,task 瞬间完成
触发条件 wake和push之间的60秒窗口内,cron_jobs.json 被修改(任何任务变动都会触发)
影响 低——第二次触发被agent侧幂等处理(发现巡检已完成直接返回),但浪费一次API调用
之前修复 "4层防护/SKIP_OVERLAP"未覆盖此竞态——SKIP_OVERLAP统计skipped=0
建议修复方向
平台侧(根治):
_on_wake() 去重改为检查 state.status(self._runs 跨reload持久化),而非 task.done()
或 reload() 时跳过已有 self._runs 记录的 run_id,不为已在飞行中的run重新调度wake
Agent侧(兜底,我可以做):
巡检入口加幂等检查:读 daily_memory/当日.md,若已有巡检记录则直接返回,不重复执行
要我加 agent 侧的幂等兜底吗?平台侧的修复需要等版本更新。
yd_235587802
发布于 2026-08-04 10:47:43
2026-08-04
24 0
0/1000
仅支持JPG、JPEG、PNG、GIF,数量不超过4张且每张大小不超过2MB
删除建议
全部评论(0)
评论(0)