スケジュール実行
CRON / INTERVAL / ONE_TIME / DELAYED_COMPLETION の 4 種類のスケジュール種別の設定、タイムゾーン処理、ワークフローのチェーントリガー。
Braidrun のスケジューラーは 4 種類のトリガータイプに対応します: CRON(周期式)、INTERVAL(固定間隔)、ONE_TIME(一度きり)、DELAYED_COMPLETION(ワークフローのチェーントリガー)。すべての schedule はプラットフォームのスケジュールサービスによって一元管理され、サービス再起動後もそれぞれのスケジュールに従ってトリガーを継続します。
コンセプト: スケジュールと実行
1 つの schedule は「いつトリガーするか」を記述します。トリガーごとに 1 回の execution が作成されます。Schedule 自体は長期的なオブジェクトであり、execution は一度きりの実行記録です。Schedule は静的な inputs(キーと値のペア)を 1 セット持つことができ、トリガーのたびに execution の入力変数として使われます。
各 schedule は独自のタイムゾーン(IANA 名、例: Asia/Shanghai)を個別に保存し、サーバー側はそれに基づいてトリガー時刻を計算します。Web UI で新規作成する際はデフォルトで現在のアカウントのタイムゾーンが使われます。API で作成する場合は、常に timezone を明示的に渡すことを推奨します。
4 種類のスケジュールタイプ
| タイプ | 主なフィールド | 動作 |
|---|---|---|
CRON | cronExpression, timezone | 5 セグメントの cron 式に従って周期的にトリガーします。粒度は分単位です |
INTERVAL | interval, startTime, endTime | 固定のミリ秒ごとに 1 回トリガーします。開始 / 終了時刻を限定できます |
ONE_TIME | startTime | 時刻が来ると 1 回トリガーし、その後自動的に無効化されます |
DELAYED_COMPLETION | triggerWorkflowId, delaySeconds | 上流ワークフローが正常に完了した後、N 秒遅延してトリガーします。ワークフローチェーンに使用します |
4 種類のタイプは共通のフィールドセットを共有します: 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 |
プラットフォームをマルチインスタンスで展開する際、同一のトリガーポイントは分散ロックによって重複排除されます。1 つのノードのみが実際に実行を開始し、ノード数が増えても重複してトリガーされることはありません。
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 ミリ秒のタイムスタンプです。時刻が来て 1 回トリガーした後、schedule は自動的に無効化されます。マルチインスタンス展開では、一度きりのロックにより 1 回だけトリガーされることが保証されます。
ワークフローのチェーンスケジュール(DELAYED_COMPLETION)
DELAYED_COMPLETION は 2 つのワークフローをチェーンにつなぎます: 上流ワークフロー 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 を入力すると 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 | スケジュールを迂回して即座に 1 回実行します |
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 内の同じレイヤーの同時実行性を制御します。 2 つは互いに干渉しません。
サービス再起動後の動作
- トリガーされた実行: 自動継続が有効になっていない限り、デフォルトは INTERRUPTED です (「再起動と自動再開)
- 時刻に達していない CRON / INTERVAL / ONE_TIME: 再起動後も通常どおりトリガーされます
- 待機中の DELAYED_COMPLETION 遅延トリガー: 永続化されており、再起動後も時刻が来るまで待ってトリガーされます
- ダウンタイム中のトリガーポイントの見逃し: メイクアップなし (二重書き込みのリスクを避けるため)