ジョブ: スケジュールと起動時

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

スキャナーやレポーターでよくあるパターンです。起動時に一度すぐ実行してベースラインを得てから、スケジュールどおり継続します。ジョブ: スケジュールのみとの違いは、eventType: Startupevents エントリを追加する点です。両方のトリガーは独立しています。エージェントがジョブを読み込んだタイミングでStartupイベントが1回実行され、インターバルタイマーはStartup実行の完了を待たずにその時点から進みます。

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

ジョブのJSON

変更する箇所

フィールド
内容

id

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

name

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

schedule.intervalMinutes

起動後のスケジュール実行の間隔 (分)。Startupイベントがいつ実行されるかには影響しない

tasks[0].command

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

tasks[0].executablePath

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

tasks[0].arguments

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

tasks[0].timeoutSeconds

1回あたりの最大実行時間。Startup実行と各インターバル実行は、それぞれこの上限を独立して使う

動作の要点

スケジュールのみのパターンからの変更点は、"events": [{ "eventType": "Startup" }] を追加するだけです。それ以外は同じです。

エージェント起動時にジョブを読み込んだうえで、Startupを宣言したジョブではStartupイベントが実行されます。Startup実行とインターバルタイマーは独立しており、インターバルはStartup実行の完了を待ってから数え始めるわけではありません。そのため、ツールの実行時間がインターバル境界に近い場合、Startup実行がまだ進行中に最初のインターバル実行が始まることがあります。同時実行に耐えるようツールを設計するか、intervalMinutes を最悪実行時間より十分長く設定してください。

Startupイベントはエージェント起動ごとに1回だけです。ジョブの再読み込みやポリシー更新だけでは再実行されず、エージェントサービス自体が再起動した場合に限り再度実行されます。

KeeperLoggerはStartupジョブより前に準備が整います。ログ基盤の初期化が完了してからStartupイベントが送られるため、Startup実行の早い段階のログも失われません。

デプロイ前に

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

  2. 環境でStartup実行が安全か検討する。大規模フリートでは、エージェント再起動のたびに全エンドポイントで同時実行が走ります。連携先でリソース競合が起きる場合は、ジョブ: スケジュールのみを使い、最初の実行までの遅延を受け入れる。

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

デプロイ

保存前に検証します。

ジョブを作成します。

Startupの挙動を確認するには、エージェントサービスを再起動し、すぐに実行が記録されることを確認します。

最終更新