我有一个工作流,存在两个定时触发器,其中一个可以每日在设定时间触发,另一个无法触发,手动测试没问题。 log 里边也确认,每天只有触发器 被trigger.
请问目前dify 支持 同一个工作流“多触发器并行运行” 吗?
谢谢
目前 Dify 工作流里的「定时触发器」设计上是支持在一个工作流中放多个触发器的,但有几个容易踩坑的点,会导致你描述的现象:一个能按时触发,另一个只能手动测成功、但不会按计划执行。
先说明结论:
- 概念上支持「一个工作流多触发器并行运行」;
- 但在当前版本中,在定时触发上可能存在一些限制 / bug 或配置细节问题,实际效果往往是「只有一个在跑」。下面给你几个排查方向和一个稳妥的推荐方案。
一、先确认的几个关键点
你可以先逐项对照检查下:
-
两个定时触发器的启用状态
- 都有没有被「禁用」?界面里一般有 enable/disable 或开关。
- 有时复制节点后,新的定时触发器默认是关闭或未保存。
-
时间配置是否冲突 / 重叠
- 比如:
- 一个是「每天 10:00」,另一个也是「每天 10:00」甚至很接近;
- 有的调度实现会对同一工作流在同一时刻的多条计划做「合并」或「只保留一个」。
- 建议先做个测试:把第二个触发器改到完全不同的时间点(例如一个 10:00,一个 10:05),看第二个是否能正常跑。
- 比如:
-
时区问题
- Dify 的定时任务是按哪一个时区执行的?
- 如果你的服务器 / Dify 配置不是 Asia/Shanghai,而你在界面里是按本地时间理解的,有可能其实已经触发了,只是你看错了时间点。
- 对比一下:
- 定时触发器的配置时间
- 日志里触发的时间
确认是否存在 8 小时 / 若干小时偏差。
-
触发日志中是否能区分两个触发器
- 一般每个 trigger 节点会有自己的 ID/name,你在 log 里看到的「每天只有一个被 trigger」:
- 是确实只看到一个节点的记录,还是两个节点都跑了但后面的流程合并了?
- 如果能的话,给这两个定时触发器起明显不同的名字,方便在日志里检索。
- 一般每个 trigger 节点会有自己的 ID/name,你在 log 里看到的「每天只有一个被 trigger」:
-
是否使用了同一个「入口」下游节点
- 比如两个定时触发器都连到同一个下游节点,而这个节点或后续节点有某种「互斥」逻辑(比如单例任务、锁、限流),那表现上就像只有一个在跑。
二、当前可能存在的设计限制 / 实现细节
在部分版本 / 实现中,调度器对「同一个工作流的多个 schedule」有可能:
- 对同一 app / workflow 做「单条 schedule 绑定」,导致只有第一个配置生效;
- 或者 scheduler service 有 bug,导致多个 cron 只生效一个;
- 又或者有最大并发任务、防重入限制:
- 例如某个时间点工作流已经在执行中,调度器会跳过新的触发,以避免同一 workflow 重入;
- 如果第一个触发器运行时间较长,第二个在同一时间窗口触发就会被跳过。
因为我现在无法直接查版本对应的源码和 issue 列表,只能基于通用的工作流调度实现来推测。
稳妥起见,你可以当下这样理解:设计目标是支持多定时触发,但某些版本/场景下行为不完全稳定或只生效一个。
三、推荐的稳定解决方案
为了不被这些实现细节坑到,给你两个实践上更稳的方案。
方案 A:拆成两个工作流,各一个定时触发器
- 把现在的工作流逻辑拆成:
- 工作流 A:只保留「定时触发器 A + 对应分支逻辑」;
- 工作流 B:只保留「定时触发器 B + 对应分支逻辑」。
- 各自单独配置定时任务。
- 这样调度上是两个完全独立的计划任务,互不影响。
优点:
- 最直观、最少踩坑;
- 日志和问题排查非常清晰:哪个没跑,一眼能看出来;
- 不依赖当前版本对「同一工作流多个 scheduler」的具体实现。
方案 B:保留一个定时触发器,用「路由/条件节点」在内部区分
- 在工作流入口只保留一个「定时触发器」;
- 在定时触发后,接一个「条件判断 / Router 节点」:
- 在这里根据「当前时间 / 日期 / 自定义变量」来判断走哪一条支路:
- 比如:
- 每天 10:00 触发一次
- 在工作流里判断:如果今天是工作日 → 走路径 1;否则 → 走路径 2。
- 或者按日期模 2、模 7、周几等条件分流。
- 比如:
- 在这里根据「当前时间 / 日期 / 自定义变量」来判断走哪一条支路:
- 如果你希望每天固定两个不同的时间点跑两条逻辑,可以:
- 一个定时触发器频率稍高(比如每半小时执行,但在内部条件里只有满足 10:00 ±某分钟窗口才跑「逻辑 A」,满足 15:00 ±某分钟窗口才跑「逻辑 B」),其他时间分支直接结束。
优点:
- 完全规避「多个定时触发器」本身的调度兼容性问题;
- 所有逻辑集中在一个 workflow,便于维护和查看全局状态。
四、你可以帮忙确认 / 补充的信息
如果你愿意继续排查,可以补充这几项信息,我可以帮你更具体地推断原因:
- 你的 Dify 版本号(在设置页或 docker-compose 里可以看到镜像 tag)。
- 两个定时触发器的具体配置方式(例如:
- Trigger 1:每天 10:00
- Trigger 2:每天 18:00
时区设置如何?
- 日志中有没有看到第二个 trigger 节点的任何执行记录(节点名/ID 截图或文字描述即可)。
- 两个触发器下游是不是共享了一部分节点,还是完全独立的两条链路?
总结
- 理论上:Dify 是支持「同一工作流存在多个触发器」的。
- 你当前遇到的情况,很可能是调度层面对「同一工作流多个定时触发」存在限制 / bug,或者配置上有时间冲突、时区等问题,导致落实到运行时只有一个在触发。
- 在官方明确多 scheduler 行为之前,推荐优先用「拆成两个 workflow」或「一个定时触发 + 内部路由」的方式实现多计划任务,这在实际生产里更稳。
如果你方便的话,可以先试一下「拆成两个工作流」这个方案,看是否两个都能按计划触发,再告诉我结果,我们再看是不是值得提一个 issue 让官方修。