跳转到主要内容
文档运行定时调度

定时调度

CRON / INTERVAL / ONE_TIME / DELAYED_COMPLETION 四种调度类型的配置、时区处理与工作流链式触发。

Braidrun 的调度器支持四种触发类型:CRON(周期表达式)、INTERVAL(固定间隔)、ONE_TIME(一次性)、DELAYED_COMPLETION(工作流链式触发)。所有 schedule 由平台调度服务统一管理,服务重启后按各自时间表继续触发。

概念:schedule 与 execution

一个 schedule 描述"何时触发";每次触发会创建一次 execution。Schedule 自身是长期对象,execution 是一次性的运行记录。Schedule 可以携带一份静态的 inputs(键值对),每次触发都作为 execution 的输入变量。

每条 schedule 独立保存自己的时区(IANA 名称,如 Asia/Shanghai),服务端按它计算触发时间。Web UI 新建时默认使用当前账号时区;走 API 创建时建议总是显式传 timezone。

四种调度类型

类型关键字段行为
CRONcronExpression, timezone按 5 段 cron 表达式周期触发,粒度到分钟
INTERVALinterval, startTime, endTime每隔固定毫秒数触发一次,可限定起止时间
ONE_TIMEstartTime到点触发一次,随后自动停用
DELAYED_COMPLETIONtriggerWorkflowId, delaySeconds上游工作流成功完成后延迟 N 秒触发,用于工作流链

四种类型共用一套通用字段:enabled(是否启用)、maxRuns(最大触发次数)、inputs(静态输入变量)。endTime 已过或触发次数达到 maxRuns 时,schedule 会被自动停用,但不会被删除。

创建 CRON schedule

bash
curl -X POST https://braidrun.com/api/schedules \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
    "workflowId": "<workflow-id>",
    "name": "Daily 9 AM report",
    "scheduleType": "CRON",
    "cronExpression": "0 9 * * *",
    "timezone": "Asia/Shanghai",
    "inputs": {
      "environment": "production"
    }
  }'

cron 表达式为 5 段制:分 时 日 月 周。支持 *、列表(1,3,5)、区间(1-5)、步进(*/6);周日可写 0 或 7。触发时间按 schedule 自己的 timezone 计算。

表达式含义
0 9 * * *每天 09:00
0 9 * * 1-5工作日 09:00
0 */6 * * *每 6 小时
30 14 1 * *每月 1 日 14:30

平台多实例部署时,同一个触发点由分布式锁去重:只有一个节点真正发起执行,不会因为节点数增加而重复触发。

INTERVAL:固定间隔

请求体和 CRON 一样发到 POST /api/schedules,只是字段不同:

json
{
  "workflowId": "<workflow-id>",
  "name": "每 5 分钟同步一次",
  "scheduleType": "INTERVAL",
  "interval": 300000,
  "startTime": 1785542400000,
  "endTime": 1788220800000,
  "maxRuns": 500
}
  • interval — 触发间隔,单位毫秒;小于 1 秒的值会被抬到 1 秒
  • startTime / endTime — 可选,epoch 毫秒时间戳;设了 startTime 会先等到该时刻再开始,过了 endTime 自动停用
  • maxRuns — 可选,触发满这么多次后自动停用

ONE_TIME:一次性

json
{
  "workflowId": "<workflow-id>",
  "name": "上线前补跑一次",
  "scheduleType": "ONE_TIME",
  "startTime": 1785546000000
}

startTime 为 epoch 毫秒时间戳。到点触发一次后 schedule 自动停用;多实例部署下由一次性锁保证只触发一次。

工作流链式调度(DELAYED_COMPLETION)

DELAYED_COMPLETION 把两个工作流串成链:上游工作流 A 每次以 COMPLETED 状态结束后,等 delaySeconds 秒,自动触发本 schedule 绑定的工作流 B。典型用法:数据拉取工作流跑完 10 分钟后自动跑报表工作流。

json
{
  "workflowId": "<workflow-B-id>",
  "name": "A 完成 10 分钟后跑 B",
  "scheduleType": "DELAYED_COMPLETION",
  "triggerWorkflowId": "<workflow-A-id>",
  "delaySeconds": 600,
  "maxRuns": 10
}
  • 无论 A 是被手动、Webhook、定时还是链式触发的,只要成功完成就会计入;失败或被取消的执行不会触发下游
  • delaySeconds — 必填,0 到 30 天(2592000 秒);0 表示完成后立即触发
  • maxRuns — 不填为不限次数;填 1 表示只链一次;填 N 表示最多链 N 次,达到后自动停用
  • triggerWorkflowId — 不能等于 workflowId(自己触发自己会无限循环),且创建者需要对上游工作流有查看权限
  • 等待中的延迟触发会持久化存储,服务重启或滚动发布不会丢:到点后照常触发

管理 schedule

端点作用
GET /api/schedules列出可见的全部 schedule
GET /api/schedules/{id}查看单条
PUT /api/schedules/{id}更新;字段与创建相同,改类型时按新类型重新校验
DELETE /api/schedules/{id}删除
POST /api/schedules/{id}/toggle启用 / 停用
POST /api/schedules/{id}/run绕过时间表立即执行一次
GET /api/schedules/{id}/history触发历史
GET /api/schedules/workflows/{workflowId}列出某工作流下的全部 schedule
bash
# 立即执行一次(返回这次 execution)
curl -X POST https://braidrun.com/api/schedules/<schedule-id>/run \
  -H "Authorization: Bearer <token>"

# 停用(enabled=true 则启用;不带参数则在两者间切换)
curl -X POST "https://braidrun.com/api/schedules/<schedule-id>/toggle?enabled=false" \
  -H "Authorization: Bearer <token>"

# 最近 50 条触发历史
curl "https://braidrun.com/api/schedules/<schedule-id>/history?limit=50" \
  -H "Authorization: Bearer <token>"

toggle 的 enabled 可以放 query 参数或 JSON body;两者都不传时在启用 / 停用之间切换。history 每条记录含状态、成功与否、起止时间,limit 默认 50、最大 500。

共享输入与参数预设

除了在 schedule 上直接设置 inputs,还可以给工作流建"参数预设":同一个 workflow 用不同预设跑不同配置。

bash
# 创建一个参数预设
curl -X POST https://braidrun.com/api/workflows/<wf>/presets \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "生产环境",
    "description": "生产环境参数",
    "variables": {
      "environment": "production",
      "debug_mode": "false",
      "max_retries": "3"
    }
  }'

# 用预设触发执行
curl -X POST https://braidrun.com/api/workflows/<wf>/presets/<id>/execute \
  -H "Authorization: Bearer <token>"

多工作流批量并发

从工作流列表多选后点击"并发执行",会一次启动一批 execution。

  • 每个被选中的 workflow 都会创建自己的 execution 记录
  • 超出 maxConcurrency 的 execution 会先进入 PENDING
  • 前面运行中的 execution 完成后,队列中的下一个自动转成 RUNNING
  • 0 表示不限制,同时启动整批

Workflow 顶层的 concurrency 控制的是单个 workflow 内部 DAG 同层并发;两者互不干扰。

服务重启后的行为

  • 已触发的 execution:默认标 INTERRUPTED,除非开启了自动续跑(见重启与自动续跑
  • 未到时间的 CRON / INTERVAL / ONE_TIME:重启后照常触发
  • 等待中的 DELAYED_COMPLETION 延迟触发:已持久化,重启后继续等到点触发
  • 宕机期间错过的触发点:不补跑(避免双写风险)

相关页面