ジョブ: スケジュールのみ

想定読者: 固定間隔でジョブを実行し、エージェント起動直後には実行したくない統合担当者。

デフォルトでは、schedule のみを指定したジョブは、最初のインターバルが経過するまで待機してから実行します。エージェント起動時に即時実行は行われません。起動直後の実行が運用上の負荷や時期尚早になる場合 (依存サービスの初期化に時間が必要な場合、エージェント再起動のたびにフリート全体で負荷が集中するのを避けたい場合など) に本パターンを使います。起動時にも即座に実行したい場合は、代わりにジョブ: スケジュールと起動時をご参照ください。

本例はWindowsのパスを使います。LinuxおよびmacOSでは、ジョブ: 最小構成 (Linux) およびジョブ: 最小構成 (macOS) の例に示すとおり、パスと osFilter を置き換えてください。

ジョブのJSON

変更する箇所

フィールド
内容

id

本ジョブを一意に識別する文字列。ハイフンを使い、アンダースコアは使いません。ファイル名は id と一致させます (例: "id": "my-tool" のときは my-tool.json)。

name

ログや管理画面に表示する名称

schedule.intervalMinutes

実行間隔 (分)。120 は2時間ごと。前回の実行が完了してからの経過時間であり、時刻に揃った間隔ではありません。120 が「毎正時を起点に2時間ごと」という意味にはなりません。

tasks[0].command

バイナリ名。パスや拡張子は含めません。

tasks[0].executablePath

エンドポイント上のバイナリのフルパス

tasks[0].arguments

バイナリが受け付けるフラグ。{KeeperApiBaseUrl} は残します。

tasks[0].timeoutSeconds

最大実行時間。想定される最長実行時間を十分にカバーする値にしつつ、ハングしたプロセスが長期間未検知のままにならない程度に抑える

動作の要点

events 配列がなく、Startupトリガーもない構成がスケジュールのみです。エージェント起動時にはジョブが読み込まれ、インターバルタイマーが始まりますが、タスクはすぐには実行されません。最初の実行は、スケジューラの初期化から intervalMinutes 分経過後です。

intervalMinutes は実行間の時間であり、壁時計上の整列ではありません。intervalMinutes120 でエージェントが09:47に起動した場合、最初の実行はおおよそ11:47前後であり、10:00や12:00にはなりません。時刻に揃えたスケジュールが必要な場合は、代わりに cronExpression のスケジュールを使います。

これはエージェント起動時刻に関わらず、偶数時の冒頭 (00:00、02:00、04:00など) に実行されます。

ここでは timeoutSeconds7200 にし、120分のインターバルに合わせています。一般的には、想定する最長実行時間よりやや長めにタイムアウトを設定し、タスクが完了できる余裕を持たせつつ、次の予定実行の前にハングを検知できるようにします。

デプロイ前に

  1. ジョブを登録する前に、エンドポイントの executablePath にバイナリをデプロイする。

  2. intervalMinutes がプレースホルダではなく、実際に欲しい実行間隔になっているか確認する。

  3. ファイル名は id と一致させる。

デプロイ

保存前に検証します。

ジョブを作成します。

ジョブの登録の有無と状態を確認します。

最終更新