AITM では、独自の定期メンテナンスや自動化スクリプトを、実行中のインスタンス内で直接実行できます。Docker イメージの再ビルドや再デプロイは不要で、必要なのはコンテナの再起動だけです。
ユーザージョブ(スケジュールされたプラグインジョブ)
plugins フォルダの場所
AITM のすべてのリリースビルド(full、online、thin の各 Docker バリアント)には、イメージに組み込まれた plugins-runtime/ レイヤーが含まれています。ただし、実際に重要なフォルダは、永続的にバインドマウントされるデータボリューム、つまりデータディレクトリ内の plugins です。通常は、実行中のコンテナ内の $AITM_DATA_DIR/plugins であり、イメージ内のパスではありません。
- 初回インストール時は空の状態です。
- 初回起動時に、コンテナのエントリポイントが参照用の
example-scheduled-jobプラグインをそこに配置します。ただし、そのサブディレクトリがまだ存在しない場合に限るため、このフォルダに加えた編集は、アップグレードや再起動後も保持されます。 - AITM はコンテナの起動のたびに plugins ディレクトリを再スキャンします。そのため、ジョブを追加または編集した後は、反映させるためにコンテナを再起動する必要があります(再ビルドは不要です)。
独自のジョブを追加する
- マウントされた
plugins/パスの下に、新しいサブディレクトリを作成します(ジョブ/プラグインごとに1つのディレクトリ)。 - その中に、
aitm.jobs配列を含むplugin.jsonファイルを追加します。 - ジョブの
handler.pathが指すスクリプトファイルを追加します。 - AITM コンテナを再起動します。
plugin.json の構造
| フィールド | 説明 |
|---|---|
name | ジョブの一意の識別子。 |
label | UI に表示される、人間が読める名前。 |
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/overridePUT /api/scheduler/jobs/:name/override
安全上の注意:priority に "high" を使用しないこと
ユーザーが作成したジョブで priority: "high" を設定してはいけません。その優先度の階層は AITM 自身の内部スケジューラジョブ用に予約されており、カスタムジョブからの使用はサポートされていません。
完全な技術リファレンス(ジョブマニフェストのスキーマ内部、kind/allowedModes の意味、タイムアウト/リトライの仕組み)は、AITM 自身のドキュメントにあります。