AITM vám umožňuje spouštět vlastní periodické údržbové a automatizační skripty přímo uvnitř běžící instance — bez rebuildu Docker image, bez redeploye, jen s restartem kontejneru.
Uživatelské úlohy (naplánované pluginové úlohy)
Kde na vaší instalaci žije složka s pluginy
Každý release build AITM (plná, online i „thin“ varianta Docker image) obsahuje vrstvu plugins-runtime/ zabudovanou v samotném image. Pro vás jako zákazníka je ale důležitá jiná, trvalá složka: plugins uvnitř datového adresáře připojeného jako svazek (bind mount) — typicky $AITM_DATA_DIR/plugins uvnitř běžícího kontejneru, nikoli cesta uvnitř image.
- Při první instalaci je tato složka prázdná.
- Při prvním spuštění kontejneru ji entrypoint skriptu naplní referenční ukázkovou úlohou
example-scheduled-job— ale pouze pokud daná podsložka ještě neexistuje, takže vaše vlastní úpravy přežijí upgrady i restarty. - AITM znovu prohledá složku s pluginy při každém startu kontejneru — po přidání nebo úpravě úlohy je proto potřeba kontejner restartovat (rebuild image není nutný).
Přidání vlastní úlohy
- Vytvořte novou podsložku v připojené cestě
plugins/(jedna složka na úlohu/plugin). - Do ní vložte soubor
plugin.jsonobsahující poleaitm.jobs. - Vložte skript, na který odkazuje
handler.pathdané úlohy. - Restartujte kontejner AITM.
Struktura plugin.json
| Pole | Popis |
|---|---|
name | Jedinečný identifikátor úlohy. |
label | Lidsky čitelný název zobrazený v UI. |
intervalMs | Interval opakování úlohy v milisekundách. |
priority | Priorita plánování — viz bezpečnostní poznámka níže, "high" je vyhrazeno pro interní úlohy AITM. |
timeoutMs | Maximální doba běhu, než je úloha ukončena. |
onTimeout | Chování při vypršení timeoutu. |
heavy | Označuje úlohu jako náročnou na zdroje. |
parallel | Zda může běžet souběžně s dalšími úlohami. |
concurrencyGroup | Skupina, uvnitř které se úlohy nespouští souběžně. |
after | Seznam úloh, které musí doběhnout dřív. |
next | Úloha spuštěná po úspěšném doběhnutí této. |
minFreeRamMb / minFreeCpuPercent | Minimální volné zdroje potřebné ke spuštění. |
kind | 'in-process' | 'child-process' | 'remote' — způsob provedení úlohy. |
allowedModes | Režimy serveru, ve kterých je úloha povolena. |
handler | { type: 'script', path, args, env } — co a jak se spustí. |
Ukázkový příklad
Ilustrativní struktura vycházející z dodávané ukázkové úlohy 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": {}
}
}
]
}
}
Ladění úlohy bez redeploye
Běžící úlohu lze přes REST přepsat (interval, priorita, zapnutí/vypnutí) bez restartu kontejneru nebo redeploye:
GET /api/scheduler/jobs/:name/overridePUT /api/scheduler/jobs/:name/override
Bezpečnostní poznámka: nikdy nepoužívejte priority „high“
Vlastní (zákaznická) úloha nesmí nikdy použít priority: "high" — tato úroveň priority je vyhrazena výhradně pro interní plánovací úlohy AITM a její použití z vlastní úlohy není podporováno.
Podrobnější technickou referenci (vnitřní schéma manifestu úlohy, sémantiku kind/allowedModes, mechaniku timeoutů a retry) najdete v dokumentaci AITM.