
# 传统周期调度
#### 解释说明
周期调度作业支持设置调度周期符合条件的作业为依赖作业。设置依赖作业的操作详情请参考[配置作业调度任务（批处理作业）](https://support.huaweicloud.com/usermanual-dataartsstudio/dataartsstudio_01_0470.html#section1)章节。
例如周期调度作业A，可设置其依赖作业为作业B，如[图1]所示进行配置。则仅当其依赖的作业B在某段时间内所有实例运行完成、且不存在失败实例时，才开始执行作业A。
![](https://support.huaweicloud.com/bestpractice-dataartsstudio/public_sys-resources/note_3.0-zh-cn.png)
- 依赖的作业B的"某段时间"，计算方法如下，详见后文[设置依赖作业后的作业运行原理]。
  - 同周期依赖，如分钟依赖分钟、小时依赖小时或天依赖天时，"某段时间"为 **(作业A执行时间-作业A周期时间, 作业A执行时间\]**。
  
  - 跨周期依赖：如小时依赖分钟、天依赖分钟、天依赖小时或月依赖天时，"某段时间"为 **\[上一作业A调度周期的自然起点, 当前作业A调度周期的自然起点)** 。
   
- 作业A是否判断其依赖的作业B的实例状态，与"依赖的作业失败后，当前作业处理策略"参数有关，具体如下：
  - "依赖的作业失败后，当前作业处理策略"参数配置为"挂起"或"取消执行"后，当其依赖的作业B在某段时间内存在运行失败实例，则作业A"挂起"或"取消执行"。
  
  - "依赖的作业失败后，当前作业处理策略"参数配置为"继续执行"，只要其依赖的作业B在某段时间内所有实例跑完（不判断其状态），则作业A就继续执行。
   
 
图1作业依赖属性   
![](https://support.huaweicloud.com/bestpractice-dataartsstudio/zh-cn_image_0000001627725317.png "点击放大")
本章节主要介绍[设置依赖作业的条件]，以及[设置依赖作业后的作业运行原理]。
 #### 设置依赖作业的条件
当前周期调度作业的调度周期包括分钟、小时、天、周、月这五种周期，周期调度作业A如果要配置依赖作业为周期调度作业B，则调度周期必须符合以下要求：
- 作业A的调度周期不能比依赖作业B小。例如，作业A和作业B同为分钟/小时调度，A的间隔时间小于B的间隔时间，则作业A不能设置作业B为依赖作业；作业A为分钟调度，作业B为小时调度，则作业A不能设置作业B为依赖作业。
- 作业A和依赖作业B中不能有任一调度周期为周。例如，作业A的调度周期为周或作业B的调度周期为周，则作业A不能设置作业B为依赖作业。
- 调度周期为月的作业只能依赖调度周期为天的作业。例如，作业A的调度周期为月，则作业A只能设置调度周期为天的作业为依赖作业。
 
不同调度周期的作业，其允许配置的依赖作业调度周期总结如[图2]所示。
图2作业依赖关系全景图   
![](https://support.huaweicloud.com/bestpractice-dataartsstudio/zh-cn_image_0000001562796428.png "点击放大")
 #### 设置依赖作业后的作业运行原理
同周期依赖和跨周期依赖的作业运行原理有所差异。为方便说明，本例中假设"依赖的作业失败后，当前作业处理策略"参数设置为"继续执行"，作业A不判断作业B的实例运行状态；如果该参数设置为"挂起"或"取消执行"，则作业A还会额外判断作业B的实例中是否存在失败实例。
- **同周期依赖** ：即作业A与其依赖作业B为相同调度周期，如分钟依赖分钟、小时依赖小时或天依赖天。
  同周期依赖的情况下，当作业A的依赖作业配置为作业B后，作业A会在**(作业A执行时间-作业A周期时间, 作业A执行时间\]**时间区间内检查是否有作业B的实例运行，只有在此期间作业B的实例运行完成才会运行作业A。
  示例1：作业A依赖作业B，均为分钟调度。作业A的开始时间10:00，周期时间20分钟；作业B的开始时间10:00，周期时间10分钟。则会出现如下情况：
  表1示例1：同周期作业依赖情况 
  | 时间点   | 作业B（分钟调度，开始时间10:00，周期时间10分钟） | 作业A（分钟调度，开始时间10:00，周期时间20分钟）                      |
  |:---|:---|:---|
  | 10:00 | 执行                           | 检查**(09:40, 10:00\]** 区间，有作业B实例运行，待作业B执行完成后，执行作业A |
  | 10:10 | 执行                           | -                                                 |
  | 10:20 | 执行                           | 检查**(10:00, 10:20\]** 区间，有作业B实例运行，待作业B执行完成后，执行作业A |
  | 10:30 | 执行                           | -                                                 |
  | ...   | ...                          | ...                                               |
     
  示例2：作业A依赖作业B，均为天调度。作业A的开始时间为8月1日09:00；作业B的开始时间8月1日10:00。则会出现如下情况：
  表2示例2：同周期作业依赖情况 
  | 时间点       | 作业B（天调度，开始时间为8月1日10:00） | 作业A（天调度，开始时间8月1日09:00）                                    |
  |:---|:---|:---|
  | 8月1日09:00 | -                       | 检查**(7月31日09:00, 8月1日09:00\]** 区间，无作业B实例运行，不执行作业A         |
  | 8月1日10:00 | 执行                      | -                                                         |
  | 8月2日09:00 | -                       | 检查**(8月1日09:00, 8月2日09:00\]** 区间，有作业B实例运行，待作业B执行完成后，执行作业A |
  | 8月2日10:00 | 执行                      | -                                                         |
  | ...       | ...                     | ...                                                       |
     
  ![](https://support.huaweicloud.com/bestpractice-dataartsstudio/public_sys-resources/note_3.0-zh-cn.png)
  天作业依赖天作业，上游作业调度时间早于下游作业，下游作业才能依赖到上游当天的作业。
  
- **跨周期依赖** ：即作业A与其依赖作业B为不同调度周期，如小时依赖分钟、天依赖分钟、天依赖小时或月依赖天。
  跨周期依赖的情况下，当作业A的依赖作业配置为作业B后，作业A会在 **\[上一作业A调度周期的自然起点, 当前作业A调度周期的自然起点)** 时间区间内检查是否有作业B的实例运行，只有在此期间作业B的实例运行完成才会运行作业A。
  ![](https://support.huaweicloud.com/bestpractice-dataartsstudio/public_sys-resources/note_3.0-zh-cn.png)
  调度周期的自然起点定义如下：
  - 调度周期为小时：**上一调度周期的自然起点** 为上一小时的零分零秒，**当前调度周期的自然起点**为当前小时的零分零秒。
  
  - 调度周期为天：**上一调度周期的自然起点** 为昨天的零点零分零秒，**当前调度周期的自然起点**为今天的零点零分零秒。
  
  - 调度周期为月：**上一调度周期的自然起点** 为上个月1号的零点零分零秒，**当前调度周期的自然起点**为当月1号的零点零分零秒。
   
  示例3：作业A依赖作业B，作业A为天调度，作业B为小时调度。作业A的每天02:00执行；作业B的开始时间00:00，间隔时间10小时。则会出现如下情况：
  表3示例3：跨周期作业依赖情况 
  | 时间点      | 作业B（小时调度，开始时间00:00，间隔时间10小时） | 作业A（天调度，每天02:00执行）                                    |
  |:---|:---|:---|
  | 第1天00:00 | 执行                           | -                                                     |
  | 第1天02:00 | -                            | 检查**\[第0天00:00:00, 第1天00:00:00)** 区间，无作业B实例运行，不执行     |
  | 第1天10:00 | 执行                           | -                                                     |
  | 第1天20:00 | 执行                           | -                                                     |
  | 第2天00:00 | 执行                           | -                                                     |
  | 第2天02:00 | -                            | 检查**\[第1天00:00:00, 第2天00:00:00)** 区间，有作业B实例运行完成，执行作业A |
  | 第2天10:00 | 执行                           | -                                                     |
  | 第2天20:00 | 执行                           | -                                                     |
  | ...      | ...                          | ...                                                   |
     
  示例4：作业A依赖作业B，作业A为月调度，作业B为天调度。作业A的每月1号、2号的02:00执行；作业B在8月1日00:00开始执行。则会出现如下情况：
  表4示例4：跨周期作业依赖情况 
  | 时间点       | 作业B（天调度，8月1日00:00执行） | 作业A（月调度，每月1号、2号的02:00执行）                                |
  |:---|:---|:---|
  | 8月1日00:00 | 执行                   | -                                                       |
  | 8月1日02:00 | -                    | 检查**\[7月1日00:00:00, 8月1日00:00:00)** 区间，无作业B实例运行，不执行     |
  | 8月2日00:00 | 执行                   | -                                                       |
  | 8月2日02:00 | -                    | 检查**\[7月1日00:00:00, 8月1日00:00:00)** 区间，无作业B实例运行，不执行     |
  | ...       | -                    | ...                                                     |
  | 9月1日00:00 | 执行                   | -                                                       |
  | 9月1日02:00 | -                    | 检查**\[8月1日00:00:00, 9月1日00:00:00)** 区间，有作业B实例运行完成，执行作业A |
  | 9月2日00:00 | 执行                   | -                                                       |
  | 9月2日02:00 | -                    | 检查**\[8月1日00:00:00, 9月1日00:00:00)** 区间，有作业B实例运行完成，执行作业A |
  | ...       | ...                  | ...                                                     |
     
  
 
