---
order: 5
navTitle: 调度管理
indexTitle: 调度管理
---
# 调度管理

调度管理（计划任务）负责定时执行系统中的各种类型的任务，包括数据提取任务、定时计算任务，数据质量较验任务、甚至一些脚本开发的个性化的业务逻辑任务。

## 计划管理{#manage-schedule}

一个计划表示一个定时执行的“批次”，同时也是调度功能中的一个管理单元。每个计划都可以配置独立的调度策略（如执行频率、并发度等），系统会根据这些策略自动调度和执行计划内的所有任务。通过计划，用户可以将具有相似业务属性或执行要求的任务组织在一起，实现任务的统一管理和自动化执行。

### 增删计划{#add-remove-schedule}

1. **新建计划**：在**计划**页面，点击**新建**，在打开的二级页面中设置计划相关属性后，点击**保存**按钮
2. **删除计划**：勾选计划，点击左上角的**删除**按钮，需要注意的是**计划被删除后，不能撤销**

![新建计划](./images/schedule-create.gif)

计划上的属性设置分类三类：基本、任务、高级，具体如下：

**基本**

- **启用**：默认勾选，表示计划创建后系统会开始按时间设定进行调度，如果希望创建的计划先不要开始定时调度，那么可以取消勾选
- **名称**：计划的名称
- **详细信息**：计划的详细描述信息
- **类型**：计划中可以添加哪些类型的任务，可选数据提取、订阅、数据检测，订阅类任务和数据提取类任务不能共存于一个计划
- **所属文件夹**：计划所属的分类，方便用户管理，使用`/`作为分隔符可以实现多级分类，如`/test/plan1`。可参考[计划分组显示](#schedule-group)
- **并行执行**：默认为串行，表示计划内多个任务间的执行关系，是并行还是串行，若为并行，还需要输入并行度，即并行的任务的个数，建议参考服务器性能设置
- **并行度**：当计划的并行执行为并行时，需要设置并行度，即同时执行的任务个数
- **执行策略**：并行执行时用于控制不同优先级之间分层执行顺序的策略，可选值为：
  - **高优先级优先开始**：优先级高的任务先执行，有多余线程时也会同时执行低优先级任务
  - **高优先级必须先执行完**：优先级高的任务先执行，有多余线程时也必须先等高优先级执行完后再开始低优先级任务
  - **高优先级必须先成功执行完**：优先级高的任务先执行，有多余线程时也必须先等高优先级成功执行完后再开始低优先级任务。如果有高优先级的任务执行失败，则整个计划会终止执行，低优先级的任务都不会执行。
- **时间设置**：计划自动执行的时间，系统提供了如下图所示丰富的时间选项，可以选择执行一次，或者间隔固定时间执行，以及自定义设置
- **执行条件**：计划调度的前提条件，不满足调度条件的计划将不会执行，比如 `TOSTR(TODAY(),'dd') = '01'` 表示计划只在每个月1号执行
- **计划超时时间**：计划的整体超时设置，单位为秒。用于控制计划的整体执行时间不超过多长时间，当超过执行时间时，剩余的任务将不会被执行，计划会直接退出，但已经开始的还是会继续执行，主要用于避免因为网络阻塞等问题导致计划执行时间超过预期的执行时间窗口。

**任务**

给计划内的所有任务设置的默认属性。

- **任务默认优先级**：任务的默认优先级，优先级范围是0～100，任务可以有各自不同的优先级。若不考虑依赖关系，优先级高的任务将总是优先执行。数值越大，优先级越高。
- **任务默认超时时间**：任务执行的最长时间，单位为秒，任务执行超时将被终止，并根据失败重试规则决定是否重新尝试执行。主要用于防止在某些网络阻塞的情况下导致任务长时间阻塞。
- **失败重试**：任务执行失败时可以给不同类型的错误设置不同的重试策略。
  - **匹配错误**：系统预置了几种类型错误可以直接选择，如**默认**、**网络错误**、**任务执行超时**、**数据未就绪**，也可以输入任务执行错误日志的关键词进行匹配。
  - **重试间隔（秒）**：任务执行失败后，重试的间隔时间，单位为秒。
  - **最大重试次数**：任务执行失败后，最大重试的次数，超过最大重试次数后，任务将不再重试。
  - **最长重试时间**：任务执行失败后，最大重试总时长，单位为秒，超过最长重试时间后，任务将不再重试。

**高级**

- **全局参数**：计划内的全局参数，会根据同名传递规则自动传递给计划内的所有任务（前提是任务定义的同名参数），比如计划内多个任务都接受数据期参数进行增量提取，默认都是提取当月数据，当需要统一重新提取指定期的数据时，可以在计划全局参数中定义参数`数据期=2024`，那么计划内可以接收数据期参数的增量提取任务都会按照2024年的数据进行提取。
- **依赖计划**：计划准备执行时，若依赖的计划正在执行，会等待这些计划执行完毕后才开始执行当前计划。
- **指定集群节点**：集群环境下，指定计划在选择的节点列表上执行，系统将按照列表顺序选择第一个可用的节点执行，如果选择的节点都不可用，则计划不会执行；系统提供了可视化页面查看集群节点的状态，参考[集群状态](../sys-settings/performance/cluster.md#集群状态)
- **结果通知**：计划执行完成后是否通知用户，可选择**不通知**、**总是通知**或者**出错时通知**。
- **消息模板**：选择发送结果通知使用的[消息模板](https://docs.succapp.com/v5/sys/settings/co)，也可以选择添加模板来创建一个消息模板。
- **接收用户**：接收结果通知的用户，通知用户支持输入用户的ID，邮箱地址或者手机号码，用户将在计划执行完成后收到结果通知。使用通知功能前，需要在[外部服务](../sys-settings/more/remote-services/README.md)按需配置好[邮件服务](../sys-settings/more/remote-services/email.md)、[短信服务](../sys-settings/more/remote-services/message.md)。

### 执行计划{#run-schedule}

计划如果设置了定时执行时间，系统会自动按照时间调度执行计划（前提是计划处于**启用**状态），也可以手动勾选一个或多个计划，点击左上角的**立即执行**按钮，即可执行勾选的计划。

计划执行时，查看计划的执行进度有两种方式：

1. 在计划列表上的**最近执行状态**中查看执行进度
2. 在[最近调度](#latest-log)界面可以查看计划执行的进度日志

![执行计划](./images/execute_schedule.gif)

计划支持在指定的集群节点上执行，常用于控制节点间的负载均衡，可以按照节点的执行能力强弱分配计划，在[新增计划](#add-remove-schedule)界面，在**指定集群节点**属性可以设置计划在指定节点上执行，执行结束后，在[所有调度](#计划日志状态)页面，在状态列鼠标移入日志行后，点击**查询计划日志**图标按钮，可以查看计划实际执行的节点。
![验证实际执行节点](./images/2025-02-20-11-50-24.png)

:::warning
为了确保数据的一致性，计划不能多人同时执行，如果同时执行一个正在执行的计划，系统会提示`计划正在执行中`。
:::

### 中止计划{#halt-schedule}

可以通过如下方式停止正在运行的计划：

1. 在计划列表中勾选需要中止的计划

在计划列表勾选一个或多个正在执行的计划，点击左上角的**中止**按钮，系统会取消计划中还未开始的任务，停止正在执行的任务，对于已经执行完成的任务不会回滚。

2. 在计划调度日志界面停止计划

计划正在执行时，在调度日志界面会显示计划的执行进度条，点击进度条右侧的**停止**按钮，系统也会自动停止计划的执行。

![调度日志界面停止](./images/2025-02-20-16-50-24.png)

### 批量启用和停用计划{#toggle-schedule}

运维升级时需要停用启用计划，当计划很多时一个个点进去操作很麻烦，可以勾选多个计划，批量的启用或者停用计划，操作如下：

1. 在**计划**页面勾选需要启用或者停用的计划
2. 点击工具栏的**启用**或者**停用**按钮

![停用计划](./images/2021-04-13-10-58-17.png)

::: warning

1. 为了确保计划调度的稳定性，停用计划不会取消正在执行的计划，当正在执行的计划完成后，才会被停用
2. 批量停用时，如果选择的计划包括已经停用的计划，点击停用时会自动排除该计划，启用时选择了已经启用的计划也是一样

:::

### 计划分组显示{#schedule-group}

在大型项目中，尤其是数据中台、数据资产管理类系统，会涉及到大量定时的数据归集、推送任务，需要创建很多计划来管理。
在计划的[属性设置](#add-remove-schedule)中，可以通过设置**所属文件夹**属性，将计划进行业务分类，方便查看和管理，如下图：

![计划分组显示](./images/2025-02-20-16-32-30.png)

## 计划内的任务管理{#manage-scheduleTask}

任务是计划的基本组成部分，一个任务通常是一个加工模型、批处理脚本、[系统备份](../sys-settings/project/backup.md#auto)任务或[日志清理任务]()等。

### 在模型表属性中设置定时提取{#set-timedDispatch}

在**模型属性**中设置[定时提取](../data-process/data-output/README.md)时系统会自动在对应的计划中添加一个任务，取消设置后也会同步删除该任务。
![在模型表属性中设置定时提取](./images/2021-04-13-11-12-17.png)

### 批量增删任务{#add-remove-tasks}

如果已经存在大量的模型需要都加入到计划内，一个一个添加会比较繁琐，可以进行任务的批量操作，如下：

1. 在**计划**页面，点击计划的名称，进入**任务列表**
2. 在**任务列表**点击**添加**按钮，对话框中选择需要执行数据提取的模型，添加成功后，上方会出现成功添加任务提示
3. 同样的，批量删除任务点击**移除**按钮即可

![添加任务](./images/add_tasks.gif)

### 批量移动任务{#move-tasks}

在**任务列表**页面，勾选需要移动的任务，点击**移动**按钮，默认不勾选**在计划中保留任务**。勾选后，移动的任务会保留在原计划中，类似于复制到另一个计划的操作。

![批量移动任务](./images/2025-02-20-16-59-29.png)

### 查看任务{#observe-tasks}

在计划列表点击**名称**列，即可跳转到该计划的**任务列表**页面，提供了两种查看模式：

- 默认以任务列表视图展示该计划内的所有任务及任务的属性
- 点击**流向图**按钮，可切换至[流向图视图](#flow-diagram)，此时以可视化的方式展示任务执行的依赖关系和数据流向

| 列表视图 | 流向图视图 |
|------|------|
| ![列表视图](./images/2025-02-20-17-14-47.png) | ![流向图视图](./images/2025-02-20-17-15-22.png) |

当计划内任务需要按照分类管理或分层调度时，可以点击列表视图中的**展开分类**按钮，在展开的左侧树中进行[任务分类管理](#task-category)。

#### 任务属性{#task-properties}

在任务列表视图中，鼠标移入**任务**列，点击显示在任务名称右侧的**设置**按钮，可以在弹出的对话框中可以给任务设置如下执行属性：

![任务属性](./images/2025-02-20-17-39-57.png)

- **优先级**： 任务的默认优先级，优先级范围是0～100，任务可以有各自不同的优先级。若不考虑依赖关系，优先级高的任务将总是优先执行。数值越大，优先级越高。
- **依赖**：同模型上的[依赖](../data-gov/model/model-settings.md#depends)设置，通常不需要设置，当任务之间存在循环依赖或系统无法自动识别依赖关系时需要手动介入设置。
- **超时时间**：任务执行的最长时间，单位为秒，任务执行超时将被终止，并根据失败重试规则决定是否重新尝试执行。主要用于防止在某些网络阻塞的情况下导致任务长时间阻塞。
- **错误重试**：任务执行失败时可以给不同类型的错误设置不同的重试策略。同[计划属性](#add-remove-schedule)上的**错误重试**。
- **执行条件**：任务执行的前提条件，不满足执行条件的任务将不会执行，依赖此任务的其他任务不受影响，依然会正常运行，比如 `TOSTR(TODAY(),'dd') = '01'` 表示任务只在每个月1号执行
- **指定集群节点**： 默认情况下，任务会按照集群的负载均衡策略自动选择节点执行，如果希望指定任务在某个节点上执行，可以设置此属性。通常是因为任务需要访问某些特殊的数据库而访问到那个数据库需要在某一个节点上才能访问，此时需要指定执行节点。
- **允许执行时间**：设置任务只允许在指定日期时间（精确到小时）执行，其他时间会忽略执行任务，依赖此任务的其他任务不受影响，依然会正常运行。比如在一个每天执行的计划中，可能有个别任务只在月末或月初执行，此时就可以给任务设置允许执行时间。
- **开始执行时间**：设置任务只能在指定时间之后开始运行，如果时间还没到，此任务会一直等到时间才会启动，依赖此任务的其他任务也会一起等待。主要用于抽取数据时指定从上游业务库抽取数据的时间窗口起始时间。
- **任务分类**：可以将任务进行业务类别划分，详细请参考[任务分类管理](#task-category)
- **参数**：当任务可以接受动态参数时用于给任务进行传参，如果计划上设置了[全局参数](add-remove-schedule)，也会按照同名传递的规则自动传递给任务。

::: tip
在计划内有三个地方都可以给任务设置属性：[计划属性设置](#add-remove-schedule)、[任务分类目录属性设置](#task-category)、**任务属性设置**，任务在执行时会按照`任务属性设置 > 任务分类目录属性设置 > 计划属性设置`的优先级使用。
:::

在两种视图下，右键点击任务/任务所在目录，可进行如下操作：

- **设置**：单独设置任务的[任务属性](#任务属性)
- **定位到**：定位到对应的任务页面，其中提取任务跳转到模型，备份任务跳转至**系统设置** > **项目** > **备份**页面
- **查看**：查看该任务相关的[流向图](#flow-diagram)，可选择只查看当前任务的来源、只查看当前任务的影响或者查看当前任务的来源和影响
- **执行**：可以根据需要选择仅[执行](#run-tasks)当前任务的数据提取，或者执行当前任务的所有来源、执行当前任务的所有影响、执行当前任务的所有来源和影响

### 任务分类管理{#task-category}

在任务列表中，点击**展开分类**按钮，可以在展开的左侧树中对任务进行分类管理，系统提供了三种分类管理视图：

- **任务类别**：给任务设置类别，通常用于[数据仓库的分层调度](#warehouse-layered-scheduling)，将任务划分到不同层级，结合任务的优先级实现分层调度
- **元数据目录**：显示任务的元数据目录层级，方便按照元数据目录进行分类管理
- **任务优先级**：按照执行优先级分类展示任务，方便用户查询任务之间的执行先后顺序

![任务分类管理](./images/2025-05-08-15-54-13.png)

### 执行任务{#run-tasks}

在计划内支持手动选择单个的或者多个任务立即执行，往往用于某个任务执行失败需要重新执行，在**任务列表**勾选需要执行的任务，点击左上角的**立即执行**，也可以通过右键菜单执行，执行后会自动跳转至[最新日志](#latest-log)界面，监控本次计划执行情况。

![执行任务](./images/2021-04-13-11-05-45.png)

### 批处理{#batch-process}

批处理本质上是一种服务端[脚本](../data-process/transform/script.md)，常用于实际生产环境的二次开发，比如通过脚本调用copytables批量进行跨库迁移，调用gis服务更新地图信息等，在**任务**页面，点击**批处理**，进入批处理页面，页面提供如下操作：

- **新增批处理**：点击**新建脚本**按钮，在脚本编辑器页面编写自定义脚本，编写完成后可以**格式化**下脚本，保存后点击**执行**，可在进度对话框查看脚本的执行情况
- **删除批处理**：选中需要删除的批处理，点击工具栏的**删除**按钮，即可删除
- **查询批处理**：在顶部工具栏右边的搜索框中直接输入想要搜索的内容即可
- **编辑批处理属性**：点击**编辑**按钮，弹出设置批处理的对话框，可设置
  - **名称**：批处理的名称
  - **计划**：批处理所在的计划，如果希望批处理定时调度，那么可以将批处理添加至指定计划
  - **依赖**：批处理依赖的模型，可设置批处理在指定模型调度完成后执行

![编写脚本执行](./images/2021-04-08-11-14-15.gif)

## 日志{#log}

计划或者任务执行的详细日志，包括执行SQL，提取的数据行数、异常报错等信息

### 最近一次执行的任务日志{#latest-log}

**最新日志**页面可显示最近一次执行的任务日志（包括正在执行），正在执行时的日志界面如图：

![最新日志](./images/lastest-log.png)

- **执行进度**：显示计划的执行进度及预计剩余完成时间
- **停止按钮**：点击中止计划执行
- **任务筛选**：按照执行状态、任务名称筛选列表中的任务，便于出现问题时的异常跟进
- **视图切换**：
  - 支持切换显示表格视图、树视图，默认状态下为表格视图
  - 点击[流向图](#flow-diagram)可查看该计划内各个任务间的依赖关系及数据流向
- **任务列表**：
  - 列表的列头支持排序
  - 以瀑布图形式展示每个任务的执行顺序和执行耗时
  - 点击任务名称，可以跳转到对应的任务页面
  - 点击日志列的查看按钮，可以查看和复制某个任务的执行过程及具体SQL，出现异常的任务还会显示具体的异常信息，方便用户排查问题
- 点击**操作**>**日志**，可以查看任务的执行日志

### 计划的历史执行日志{#history-log}

在计划列表的**操作**列中，点击某一条计划的**日志**，进入**所有日志**页面

![所有日志](./images/2021-04-13-11-31-16.png)

- 过滤筛选栏：支持在日志列表中，对计划执行的开始、结束时间，耗时范围及执行状态进行筛选
- 点击**操作**>**日志**，可以查看本次执行计划级别的日志
- 点击**操作**>**查看**或双击行，查看当时计划执行的任务的日志信息，整体界面与[最近一次执行的任务日志](#最近一次执行的任务日志)相同

### 日志状态{#log-status}

日志的状态包括计划日志状态和计划任务日志状态。

#### 计划日志状态

进入[所有日志](#history-log)页面，在状态栏可以查看计划日志的状态，计划日志状态包括：

- **成功**：执行一次计划，计划中的任务要么执行成功要么因为不满足**调度条件**而取消，不存在异常的任务
- **失败**：执行一次计划，计划中部分任务执行出现异常
- **取消**：执行计划过程中，用户取消了计划的执行
- **正在执行**：计划正在执行

#### 计划任务日志状态

进入[最新日志](#latest-log)页面，在状态栏可以查看计划任务日志的状态，计划任务日志状态包括：

- **成功**：计划任务执行成功
- **失败**：计划任务执行出现异常
- **取消**：计划任务被取消
- **正在执行**：计划任务正在执行
- **等待**：计划任务等待被调度

::: tip

计划的**调度条件**包括[提取前检查](/howto/4dfd7483#提取前检查)设置的条件以及[任务属性](#任务属性)设置的条件。

:::

## 流向图{#flow-diagram}

流向图展示了计划内各个任务间的依赖关系，在计划执行过程中，也可以在流向图中看到模型执行的顺序，数据流向等。

### 查看流向图{#observe-flow-diagram}

在**计划**页面点击计划名称，在左侧导航栏选择`流向图`标签，查看最新执行任务流向图。

![执行调度图](./images/watch_flowdiagram.gif)

鼠标移动到流向图的模型上，会浮动出模型的名称、路径、最新调度等信息；右键出现的菜单选项中提供如下操作：

1. **定位到**：系统会定位到当前任务对应的模型中，点击浏览器的返回按键可以回到流程图界面
2. **查看**：当流向图展示的任务太多时，可以选择只查看当前任务的来源、只查看当前任务的影响或者查看当前任务的来源和影响
3. **执行**：可以根据需要选择仅执行当前任务的数据提取，或者执行当前任务的所有来源、执行当前任务的所有影响、执行当前任务的所有来源和影响

## 应用场景{#use-case}

### 数据仓库分层调度{#warehouse-layered-scheduling}

在数据仓库建设中，原始数据通常来源于不同的上游系统，比如CRM、OA、ERP等，抽取到数据仓库后需要进一步进行清洗、转换、建模等，对于大型数据仓库项目的数据ETL过程通常分为多个层次：

1. ODS层：原始数据层，保存原始数据，不做任何处理
2. DIM层：公共维度层，保存公共维度数据，比如时间维度、地区维度等
3. DWD层：明细数据层，保存明细数据，比如用户行为数据、订单明细数据等
4. DWS层：汇总数据层，保存汇总数据，比如按照地区、时间等维度汇总的订单数据
5. ADS层：应用数据层，保存应用数据，比如报表数据、大屏数据等

将以上所有层次的加工任务都添加到同一个计划中，默认情况下系统会按照任务的依赖关系这么去调度，这样可以确保在最短的时间窗口内完成调度。但有些情况下可能希望在调度过程中任务执行的层次分明，比如DWD层需要等待ODS和DIM层调度完成后才能开始调度，DWS层需要等待DWD层调度完成后才能开始调度，这时候需要进行分层调度配置。

![服饰数据仓库](./images/2025-05-08-16-28-24.png)

示例地址：[服饰数仓分层调度]()

在系统的调度管理中可以通过**任务类别**结合**优先级**的方式实现分层调度，以服饰数据仓库为例，要实现分层调度，需要按照如下步骤配置计划：

1. 新建计划并设置计划的执行策略属性为**高优先级必须先成功执行完**（也可以按需改成其他策略）
2. 切换到任务列表视图->展开分类，分别创建ODS、DIM、DWD、DWS、ADS五个任务类别，并分别设置优先级，比如90、80、70、60、50
3. 点击任务类别，分别将任务添加到对应的任务类别下

系统在调度该计划时，会优先调度高优先级的任务，高优先级的任务执行完成后再调度低优先级的任务，因为在2中给任务类别设置了优先级，所以调度时会按照任务类别的优先级顺序进行调度，即ODS->DIM->DWD->DWS->ADS的顺序执行。
