예약 실행
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을 명시적으로 전달하는 것을 권장합니다.
네 가지 스케줄 유형
| 유형 | 핵심 필드 | 동작 |
|---|---|---|
CRON | cronExpression, timezone | 5단 cron 표현식으로 주기적으로 트리거, 입도는 분 단위 |
INTERVAL | interval, startTime, endTime | 고정 밀리초마다 한 번 트리거, 시작/종료 시간을 한정할 수 있음 |
ONE_TIME | startTime | 시간이 되면 한 번 트리거하고, 이후 자동으로 비활성화 |
DELAYED_COMPLETION | triggerWorkflowId, delaySeconds | 상류 워크플로가 성공적으로 완료된 후 N초 지연하여 트리거, 워크플로 체인에 사용 |
네 가지 유형은 공통 필드 한 세트를 공유합니다: enabled(활성화 여부)、maxRuns(최대 트리거 횟수)、inputs(정적 입력 변수). endTime이 지났거나 트리거 횟수가 maxRuns에 도달하면 schedule은 자동으로 비활성화되지만 삭제되지는 않습니다.
CRON schedule 생성
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로 보내며, 필드만 다릅니다:
{
"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: 일회성
{
"workflowId": "<workflow-id>",
"name": "上线前补跑一次",
"scheduleType": "ONE_TIME",
"startTime": 1785546000000
}startTime은 epoch 밀리초 타임스탬프입니다. 시간이 되어 한 번 트리거된 뒤 schedule은 자동으로 비활성화됩니다. 다중 인스턴스 배포에서는 일회성 락으로 한 번만 트리거됨을 보장합니다.
워크플로 체인 스케줄(DELAYED_COMPLETION)
DELAYED_COMPLETION은 두 워크플로를 체인으로 엮습니다: 상류 워크플로 A가 매번 COMPLETED 상태로 종료된 후 delaySeconds초를 기다렸다가, 본 schedule에 바인딩된 워크플로 B를 자동으로 트리거합니다. 전형적인 용법: 데이터 가져오기 워크플로가 끝난 10분 후 리포트 워크플로를 자동으로 실행.
{
"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 나열 |
# 立即执行一次(返回这次 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를 서로 다른 프리셋으로 다른 설정으로 실행합니다.
# 创建一个参数预设
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 지연 트리거: 이미 영구 저장되어 있어, 재시작 후 시간이 될 때까지 계속 기다렸다가 트리거
- 다운타임 중 트리거 포인트 누락: 메이크업 없음(이중 쓰기 위험 방지)