Saltar al contenido principal
DocumentoCorrerEjecuciones programadas

Ejecuciones programadas

Configuración de los cuatro tipos de planificación CRON / INTERVAL / ONE_TIME / DELAYED_COMPLETION, gestión de zonas horarias y activación encadenada de workflows.

El programador de Braidrun admite cuatro tipos de disparo: CRON (expresión periódica), INTERVAL (intervalo fijo), ONE_TIME (una sola vez), DELAYED_COMPLETION (disparo encadenado de workflows). Todas las schedules las gestiona de forma unificada el servicio de programación de la plataforma, y tras un reinicio del servicio siguen disparándose según su propio calendario.

Concepto: cronograma y ejecución.

Una schedule describe «cuándo se dispara»; cada disparo crea una execution. La schedule en sí es un objeto de larga duración, y la execution es un registro de una única ejecución. Una schedule puede llevar un conjunto de inputs estáticos (pares clave-valor), que en cada disparo se usan como variables de entrada de la execution.

Cada schedule guarda su propia zona horaria (nombre IANA, como Asia/Shanghai), y el servidor calcula la hora de disparo según ella. Al crearla desde la Web UI se usa por defecto la zona horaria de la cuenta actual; al crearla vía API se recomienda pasar siempre timezone de forma explícita.

Los cuatro tipos de programación

TipoCampos claveComportamiento
CRONcronExpression, timezoneSe dispara periódicamente según una expresión cron de 5 segmentos, con granularidad hasta el minuto
INTERVALinterval, startTime, endTimeSe dispara cada cierto número fijo de milisegundos, con posibilidad de limitar la hora de inicio y de fin
ONE_TIMEstartTimeSe dispara una vez al llegar la hora y luego se desactiva automáticamente
DELAYED_COMPLETIONtriggerWorkflowId, delaySecondsSe dispara N segundos después de que el workflow upstream se complete con éxito, para cadenas de workflows

Los cuatro tipos comparten un conjunto de campos comunes: enabled (si está habilitada), maxRuns (número máximo de disparos), inputs (variables de entrada estáticas). Cuando endTime ha pasado o el número de disparos alcanza maxRuns, la schedule se desactiva automáticamente, pero no se elimina.

Crear una schedule CRON

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"
    }
  }'

La expresión cron es de 5 segmentos: minuto hora día mes semana. Admite *, listas (1,3,5), rangos (1-5) y pasos (*/6); el domingo se puede escribir 0 o 7. La hora de disparo se calcula según la propia timezone de la schedule.

expresiónsignificado
0 9 * * *Todos los días 09:00
0 9 * * 1-5Laborables 09:00
0 */6 * * *cada 6 horas
30 14 1 * *14:30 el día 1 de cada mes

En despliegues de la plataforma con varias instancias, un mismo punto de disparo se deduplica con un bloqueo distribuido: solo un nodo inicia realmente la ejecución, y no se dispara por duplicado por muchos nodos que haya.

Interval: intervalo fijo

El cuerpo de la solicitud se envía a POST /api/schedules igual que CRON, solo cambian los campos:

json
{
  "workflowId": "<workflow-id>",
  "name": "每 5 分钟同步一次",
  "scheduleType": "INTERVAL",
  "interval": 300000,
  "startTime": 1785542400000,
  "endTime": 1788220800000,
  "maxRuns": 500
}
  • interval — Intervalo de disparo, en milisegundos; los valores inferiores a 1 segundo se elevan a 1 segundo
  • startTime / endTime — Opcional, marca de tiempo epoch en milisegundos; si se fija startTime, se espera hasta ese instante antes de empezar, y pasado endTime se desactiva automáticamente
  • maxRuns — Opcional, se desactiva automáticamente tras alcanzar este número de disparos

ONE_TIME: una sola vez

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

startTime es una marca de tiempo epoch en milisegundos. Tras dispararse una vez al llegar la hora, la schedule se desactiva automáticamente; en despliegues con varias instancias, un bloqueo de una sola vez garantiza que se dispare solo una vez.

Programación encadenada de workflows (DELAYED_COMPLETION)

DELAYED_COMPLETION encadena dos workflows: cada vez que el workflow upstream A termina en estado COMPLETED, tras delaySeconds segundos se dispara automáticamente el workflow B enlazado a esta schedule. Uso típico: el workflow de informes se ejecuta automáticamente 10 minutos después de que termine el workflow de extracción de datos.

json
{
  "workflowId": "<workflow-B-id>",
  "name": "A 完成 10 分钟后跑 B",
  "scheduleType": "DELAYED_COMPLETION",
  "triggerWorkflowId": "<workflow-A-id>",
  "delaySeconds": 600,
  "maxRuns": 10
}
  • Se contabiliza siempre que A se complete con éxito, independientemente de si A se disparó de forma manual, por Webhook, programada o encadenada; las ejecuciones fallidas o canceladas no disparan el downstream
  • delaySeconds — Obligatorio, de 0 a 30 días (2592000 segundos); 0 significa disparar inmediatamente tras completarse
  • maxRuns — Si no se rellena, es un número ilimitado de veces; 1 significa encadenar una sola vez; N significa encadenar como máximo N veces, y al alcanzarlo se desactiva automáticamente
  • triggerWorkflowId — No puede ser igual a workflowId (dispararse a sí mismo provocaría un bucle infinito), y el creador necesita permiso de vista sobre el workflow upstream
  • Los disparos con retardo en espera se almacenan de forma persistente y no se pierden con un reinicio del servicio ni con un despliegue progresivo: al llegar la hora, se disparan con normalidad

Gestionar schedules

EndpointFunción
GET /api/schedulesListar todas las schedules visibles
GET /api/schedules/{id}Ver una en concreto
PUT /api/schedules/{id}Actualizar; los campos son los mismos que al crear, y al cambiar de tipo se revalida según el nuevo tipo
DELETE /api/schedules/{id}Eliminar
POST /api/schedules/{id}/toggleHabilitar / deshabilitar
POST /api/schedules/{id}/runEjecutar una vez de inmediato, saltándose el calendario
GET /api/schedules/{id}/historyHistorial de disparos
GET /api/schedules/workflows/{workflowId}Listar todas las schedules de un workflow concreto
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>"

El enabled de toggle se puede poner en el parámetro de query o en el JSON body; si no se pasa ninguno de los dos, alterna entre habilitar / deshabilitar. Cada registro de history incluye el estado, si tuvo éxito o no, y las horas de inicio y fin; limit es 50 por defecto, máximo 500.

Entradas compartidas y ajustes preestablecidos de parámetros

Además de fijar inputs directamente en la schedule, también se puede crear un «preset de parámetros» para el workflow: un mismo workflow se ejecuta con configuraciones distintas usando presets distintos.

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>"

Simultaneidad por lotes de múltiples flujos de trabajo

Seleccione varios elementos de la lista de flujo de trabajo y haga clic en "Ejecución simultánea" para iniciar un lote de ejecuciones a la vez.

  • Cada flujo de trabajo seleccionado creará su propio registro de ejecución.
  • La ejecución que exceda maxConcurrency primero ingresará PENDIENTE
  • Una vez completada la ejecución en ejecución anterior, la siguiente en la cola se convierte automáticamente en EN EJECUCIÓN
  • 0 No indica límite y comienza todo el lote al mismo tiempo

La simultaneidad en el nivel superior del flujo de trabajo controla la simultaneidad de la misma capa dentro del DAG interno de un único flujo de trabajo; los dos no interfieren entre sí.

Comportamiento después del reinicio del servicio

  • Ejecución activada: El valor predeterminado es INTERRUMPIDO a menos que se habilite la continuación automática (consulteReinicio y reanudación automática.
  • CRON / INTERVAL / ONE_TIME cuya hora aún no ha llegado: tras el reinicio, se disparan con normalidad
  • Disparos con retardo DELAYED_COMPLETION en espera: ya persistidos, tras el reinicio siguen esperando a que llegue la hora para dispararse
  • Puntos de activación omitidos durante el tiempo de inactividad: sin maquillaje (para evitar el riesgo de escritura doble)

Páginas relacionadas