주요 콘텐츠로 건너뛰기
문서달리다예약 실행

예약 실행

CRON / INTERVAL / ONE_TIME / DELAYED_COMPLETION 네 가지 스케줄 유형의 설정, 시간대 처리 및 워크플로 체인 트리거입니다.

Braidrun의 스케줄러는 네 가지 트리거 유형을 지원합니다: CRON(주기 표현식)、INTERVAL(고정 간격)、ONE_TIME(일회성)、DELAYED_COMPLETION(워크플로 체인 트리거). 모든 schedule은 플랫폼 스케줄 서비스가 통합 관리하며, 서비스 재시작 후 각자의 시간표에 따라 계속 트리거됩니다.

개념: 일정 및 실행

하나의 schedule은 "언제 트리거하는지"를 기술하고, 매 트리거는 한 번의 execution을 생성합니다. Schedule 자체는 장기 객체이고, execution은 일회성 실행 레코드입니다. Schedule은 정적인 inputs(키-값 쌍)를 가질 수 있으며, 매 트리거마다 execution의 입력 변수가 됩니다.

각 schedule은 자신의 시간대(IANA 이름, 예: Asia/Shanghai)를 독립적으로 저장하며, 서버가 그것에 따라 트리거 시간을 계산합니다. Web UI에서 새로 만들 때는 기본적으로 현재 계정 시간대를 사용하고, API로 생성할 때는 항상 timezone을 명시적으로 전달하는 것을 권장합니다.

네 가지 스케줄 유형

유형핵심 필드동작
CRONcronExpression, timezone5단 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 관리

Endpoint역할
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>"

다중 워크플로 일괄 동시성

워크플로 목록에서 여러 항목을 선택하고 "동시 실행"을 클릭하면 한 번에 일괄 실행이 시작됩니다.

  • 선택한 각 워크플로우는 자체 실행 기록을 생성합니다.
  • maxConcurrency를 초과하는 실행은 먼저 PENDING 상태가 됩니다.
  • 이전에 실행 중인 실행이 완료된 후 대기열의 다음 실행이 자동으로 RUNNING으로 변환됩니다.
  • 0 제한이 없음을 나타내며 동시에 전체 배치를 시작합니다.

워크플로 최상위 수준의 동시성은 단일 워크플로의 내부 DAG 내에서 동일한 레이어 동시성을 제어합니다. 둘은 서로 간섭하지 않습니다.

서비스 재시작 후 동작

  • 트리거된 실행: 자동 연속이 활성화되지 않은 경우 기본값은 INTERRUPTED입니다(참조:다시 시작 및 자동 재개
  • 시간이 되지 않은 CRON / INTERVAL / ONE_TIME: 재시작 후 평소대로 트리거
  • 대기 중인 DELAYED_COMPLETION 지연 트리거: 이미 영구 저장되어 있어, 재시작 후 시간이 될 때까지 계속 기다렸다가 트리거
  • 다운타임 중 트리거 포인트 누락: 메이크업 없음(이중 쓰기 위험 방지)

관련 페이지