AITM では、独自の定期メンテナンスや自動化スクリプトを、実行中のインスタンス内で直接実行できます。Docker イメージの再ビルドや再デプロイは不要で、必要なのはコンテナの再起動だけです。

ユーザージョブ(スケジュールされたプラグインジョブ)

plugins フォルダの場所

AITM のすべてのリリースビルド(full、online、thin の各 Docker バリアント)には、イメージに組み込まれた plugins-runtime/ レイヤーが含まれています。ただし、実際に重要なフォルダは、永続的にバインドマウントされるデータボリューム、つまりデータディレクトリ内の plugins です。通常は、実行中のコンテナ内の $AITM_DATA_DIR/plugins であり、イメージ内のパスではありません。

  • 初回インストール時は空の状態です。
  • 初回起動時に、コンテナのエントリポイントが参照用の example-scheduled-job プラグインをそこに配置します。ただし、そのサブディレクトリがまだ存在しない場合に限るため、このフォルダに加えた編集は、アップグレードや再起動後も保持されます。
  • AITM はコンテナの起動のたびに plugins ディレクトリを再スキャンします。そのため、ジョブを追加または編集した後は、反映させるためにコンテナを再起動する必要があります(再ビルドは不要です)。

独自のジョブを追加する

  1. マウントされた plugins/ パスの下に、新しいサブディレクトリを作成します(ジョブ/プラグインごとに1つのディレクトリ)。
  2. その中に、aitm.jobs 配列を含む plugin.json ファイルを追加します。
  3. ジョブの handler.path が指すスクリプトファイルを追加します。
  4. AITM コンテナを再起動します。

plugin.json の構造

フィールド説明
nameジョブの一意の識別子。
labelUI に表示される、人間が読める名前。
intervalMsジョブが繰り返される間隔(ミリ秒)。
priorityスケジューリングの優先度。下の安全上の注意を参照してください。"high" は AITM 自身の内部ジョブ用に予約されています。
timeoutMsジョブが終了されるまでの最大実行時間。
onTimeoutタイムアウトに達したときの動作。
heavyジョブがリソース集約型であることを示します。
parallel他のジョブと同時に実行してよいかどうか。
concurrencyGroupその中のジョブが同時に実行されることのないグループ。
afterこのジョブの実行前に完了していなければならないジョブ。
nextこのジョブが正常に終了した後に実行するジョブ。
minFreeRamMb / minFreeCpuPercent実行に必要な空きリソースの最小値。
kind'in-process' | 'child-process' | 'remote' — ジョブの実行方法。
allowedModesジョブの実行が許可されるサーバーモード。
handler{ type: 'script', path, args, env } — 何をどのように実行するか。

実例

同梱されている example-scheduled-job に沿った、説明用の構造です。

{
  "aitm": {
    "jobs": [
      {
        "name": "example-scheduled-job",
        "label": "Example Scheduled Job",
        "intervalMs": 3600000,
        "priority": "normal",
        "timeoutMs": 60000,
        "kind": "child-process",
        "handler": {
          "type": "script",
          "path": "./run.js",
          "args": [],
          "env": {}
        }
      }
    ]
  }
}

再デプロイせずにジョブを調整する

オペレーターは、コンテナを再起動したり再デプロイしたりすることなく、REST を使って稼働中のジョブの間隔、優先度、有効/無効の状態を上書きできます。

  • GET /api/scheduler/jobs/:name/override
  • PUT /api/scheduler/jobs/:name/override

安全上の注意:priority に "high" を使用しないこと

ユーザーが作成したジョブで priority: "high" を設定してはいけません。その優先度の階層は AITM 自身の内部スケジューラジョブ用に予約されており、カスタムジョブからの使用はサポートされていません。

完全な技術リファレンス(ジョブマニフェストのスキーマ内部、kind/allowedModes の意味、タイムアウト/リトライの仕組み)は、AITM 自身のドキュメントにあります。