更新时间:2024-08-30 GMT+08:00

自然周期调度之同周期依赖原理

解释说明

即作业A依赖于作业B的相同调度周期的运行实例。周期单位包括分钟、小时、天、周、月这五种,不同调度周期的作业,其允许配置的依赖作业调度周期总结如图1所示。

图1 同周期作业依赖关系全景图

分钟依赖分钟

规则:分钟是最小调度粒度,没有自然分钟周期的概念,依赖策略是往前推一个调度周期找依赖实例。

举例1:A依赖B,为同周期分钟作业,在同一时间点,B执行完后开始执行A。

图2 分钟依赖分钟举例一

举例2:A依赖B,A为15分钟周期,B为10分钟周期,A往前推15分钟(包括当前启动整点),依赖范围内的B实例,在2:15分执行A任务依赖1个B实例(2:10分),2:30执行的A任务依赖两个B实例(2:20和2:30)。它的边界范围为(0分,15分],前开后闭区间。

图3 分钟依赖分钟举例二

分钟依赖小时

规则:分钟级作业依赖自然小时的上一周期作业执行完成后,再执行。

举例:A依赖B,A分钟级作业依赖B小时级作业,A每10分钟触发,B是每小时第16分钟执行,那么作业A实例会在B作业上一周期执行完成后再执行。

图4 分钟依赖小时

分钟依赖天

规则:分钟作业依赖自然天的天作业,需等天作业执行完成后再执行。

例如:A依赖B,A分钟作业依赖B天作业,A每30分钟执行,B是22:45执行,那么22:45之前的A作业实例都会推迟到B作业执行完成后再执行。

图5 分钟依赖天

小时依赖分钟

规则:小时作业依赖分钟作业,往前推到上一个自然小时范围内的所有分钟级实例。区间是前开后闭(2:00,3:00]。

举例1:A依赖B,A为小时作业,每个小时0分执行,B为分钟作业,每15分钟执行一次;B执行完后执行A。A作业依赖自然小时范围内B作业实例,3:00执行的A任务依赖四个B作业实例(2:15、2:30、2:45和3:00)。

图6 小时依赖分钟举例一
  • 如果在配置作业依赖关系时勾选“最近”依赖的按钮,小时作业只依赖所选作业最近的一个运行实例,比如A在3:00开始调度,A依赖B最近的2:45调度的一个运行实例。
  • 如果作业A在零点进行调度,所依赖作业B可以是昨天的分钟任务。

小时依赖小时

规则:每个自然小时周期内的实例产生依赖,区间边界是自然小时[00:00,00:59]。

举例1:A依赖B,在同自然小时内,无论A、B设置在什么时间点执行,A永远在B之后执行。

图7 小时依赖小时举例一

举例2:A依赖B,A在每小时5分0秒执行,B在12分执行,A会等B执行完成后执行。

图8 小时依赖小时举例二

小时依赖天

规则:小时作业依赖自然天的天作业,需等天作业执行完成后再执行。

举例:A依赖B,A小时作业依赖B天作业,A每小时整点指定,B是2:30指定,那么2:30之前的A作业实例都会推迟到B作业执行完成后再执行。

图9 小时依赖天

天依赖分钟

规则:按自然天,天周期作业实例依赖一天内所有分钟级作业的实例。

举例:A依赖B,A为天作业,每天22点调度,依赖B分钟作业,每30分钟调度一次,A依赖所有B在自然天内的实例, A会在最后一个B作业实例执行完成后执行。

图10 天依赖分钟

如果在配置作业依赖关系时勾选“最近”依赖的按钮,天作业只依赖所选作业最近的一个运行实例,比如A在每天22点开始调度,A依赖B最近的21:30调度的一个运行实例。

天依赖小时

规则:按自然天,天周期作业实例依赖一天内所有小时作业的实例。A为天作业,依赖B小时作业,A依赖所有B在自然天内的实例,A会在最后一个B小时作业实例执行完成后执行。

举例:A依赖B,A配置的调度时间为每天17点执行一次,B从0点开始,每5个小时执行一次,那么A实际执行时间为JobB在20点的实例运行完之后开始运行。

图11 天依赖小时

如果在配置作业依赖关系时勾选“最近”依赖的按钮,天作业只依赖所选作业最近的一个运行实例,比如A在每天17点开始调度,A依赖B最近的15:00调度的一个运行实例。

天依赖天

规则:按自然天内的实例进行依赖,不会跨天向前推找依赖实例。在同自然天内A依赖B ,无论A、B设置在什么时间点执行,A永远在B之后执行。 天区间为[00:00:00,23:59:59]

举例1:A依赖B,A在2:00执行,B在3:00执行,A会等B在3:00执行完成后执行。

图12 天依赖天举例一

举例2:A依赖B,A在5:00执行,B在3:00执行,A在B执行完成后,在5:00执行。

图13 天依赖天举例二

天依赖周

规则:依赖自然天,天作业依赖当天的周作业。如果周作业在当天未执行,天作业直接执行。如果周作业在当天执行,天作业会等待周作业执行完成后,再开始执行。

举例1:A依赖B,A作业每天执行,B作业每周三执行。在A作业执行时,B作业当天非周三,未执行,A作业则直接执行。

举例2:A依赖B,A作业每天执行,B作业每周三执行。在A作业执行时,B作业正好当天是周三,会执行,则A作业等待B作业执行完成后,开始执行。

天依赖月

规则:依赖自然天,天作业依赖当天的月作业,如果月作业在当天未执行,天作业直接执行。如果月作业在当天执行,天作业会等待月作业执行完成后,再开始执行。

举例:A依赖B,A为天作业每天执行一次,B为月作业每月15号执行一次。如果当天非15号,B作业未执行,不会生成作业实例,A作业则直接执行;如果当天正好是15号,A作业会在B作业执行完成后执行。

图14 天依赖月

周依赖小时

规则:依赖自然天,范围是[当天的零点零分零秒,当天的23点59分59秒),查找当天的小时任务作业B是否全部执行完成,然后执行周任务作业A。

举例:A依赖B,A作业每周一调度,B作业每小时第50分钟执行。则A作业会一直等待B作业执行,一直到B作业周一最后一个任务23:50分的任务执行完成后,A作业依赖B作业当天所有任务的运行实例。

周依赖天

规则:周作业只依赖同一天调度执行的作业。

举例:A依赖B,A作业计划周二执行,B作业每天运行,A周二的作业会在周二的B作业执行完后再执行。

图15 周依赖天

周依赖周

规则:周作业只依赖同一天调度执行的作业实例。

举例1:A依赖B,A作业计划周二执行;B作业计划周三执行;作业A依赖作业B,实际上A会在周二执行,不会等到周三B执行完。

图16 周依赖周举例一

举例2:A、B作业都是周二执行,A依赖B,A会等B执行完执行。

图17 周依赖周举例二

周依赖月

规则:依赖自然天,周作业依赖当天的月作业。如果月作业在当天未执行,周作业直接执行。如果月作业在当天执行,周作业会等待月作业执行完成后,再开始执行。

举例1:A依赖B,A作业每周三执行,B作业每月10号执行。在A作业执行时,如果正好是10号,A作业会等待B作业执行完成后执行。

举例2:A依赖B,A作业每周三执行,B作业每月10号执行。在A作业执行时,如果不是10号,则A作业直接执行。

月依赖天

规则:A依赖B,月调度任务,只依赖于当前的天任务完成后,即可运行。

举例:A依赖B,A为月作业,依赖B天作业, A依赖所有B在月任务当天的那个实例,A就可运行。

图18 月依赖天

月依赖周

规则:依赖自然天,月作业依赖当天的周作业。如果周作业在当天未执行,月作业直接执行。如果周作业在当天执行,月作业会等待周作业执行完成后,再开始执行。

举例1:A依赖B,A作业每月10号执行,B作业每周三执行。在A作业执行时,B作业当天非周三,未执行,A作业则直接执行。

举例2:A依赖B,A作业每月10号执行,B作业每周三执行。在A作业执行时,B作业当天正好是周三,则A作业等待B作业执行完成后开始执行。

月依赖月

规则:依赖自然天,月作业依赖当天的月作业。被依赖的月作业如果在依赖作业之后执行,则依赖作业不会阻塞,正常执行。除此之外均会按照依赖关系去执行。

举例1:A依赖B,A作业每月1号执行,B作业每月2号执行,A作业1号正常执行,B作业不阻塞A作业执行。

举例2:A依赖B,A作业和B作业都是2号执行,A作业会依赖B作业执行完成后的作业实例。

举例3:A依赖B,A作业每月3号执行,B作业每月2号执行,3号A作业依赖2号B作业。