Job Control Language (JCL) je označení pro skriptovací jazyky používané v operačních systémech IBM mainframe. Instruuje systém, jak spustit dávkovou úlohu nebo spustit subsystém. JCL proto neobsahuje aplikační logiku samotných programů (např. COBOL, PL/I nebo assembler), ale popisuje, které programy se mají spustit, jaké prostředky (soubory, tiskárny, páskové jednotky, disky) mají být alokovány, a jak má systém zpracovat vstupy a výstupy.
Účelem JCL je říci, které programy se mají spustit a které soubory nebo zařízení použít pro vstup nebo výstup. Může také udávat podmínky, za kterých se má určitý krok přeskočit, jak mají být ošetřeny návratové kódy programů (return codes) a kde mají být uloženy výstupy nebo logy. Mezi běžné parametry patří např. DISP (dispozice datasetu), UNIT (typ zařízení), VOL= (objem), SPACE (alokované místo) nebo DCB (atributy datasetu).
Základní konstrukce JCL
JCL se skládá ze sady příkazových řádků (statements). Nejběžnější typy řádků jsou:
- //job – začíná dávkovou úlohou a zadává globální parametry (např. účetní číslo, jméno úlohy, priority, class);
- //exec – definuje krok, který provede konkrétní program nebo utility (PGM= nebo PGM=zkonazní/EXEC PGM=...);
- //dd – popisuje datasety nebo zařízení použitá v kroku (DD = Data Definition);
- //* – komentářový řádek (nezpracovává se).
Historicky je JCL částečně „kolonový“ jazyk: řádek obvykle začíná dvěma lomítky (//), následuje jméno karty (job/step/dd) a pak parametry. Existují i pravidla pro dělení dlouhých řádků a používání pokračovacích sloupců.
Krátký ukázkový příklad
//MYJOB JOB (ACCT),'TEST JOB',CLASS=A,MSGCLASS=X //STEP1 EXEC PGM=MYPROG //INFILE DD DSN=MY.INPUT.FILE,DISP=SHR //OUTFILE DD DSN=MY.OUTPUT.FILE,DISP=(NEW,CATLG), // SPACE=(CYL,(1,1)),UNIT=SYSDA
Tento jednoduchý příklad ukazuje typickou strukturu: deklaraci jobu, vykonání programu a definice vstupního a výstupního datasetu. V praxi bývají řádky složitější (konkatenuje se více DD záznamů, nastavují se parametry pro vyjímání chyb, volají se utility apod.).
Druhy a historie JCL
Existují dvě hlavní „rodiny“ IBM Job Control:
- jeden pro linii operačních systémů, která začíná systémem DOS/360 a jejímž posledním členem je z/VSE; a
- druhý pro linii od OS/360 k z/OS, přičemž ten druhý nyní zahrnuje rozšíření JES, Job Entry Control Language (JECL).
Tyto dvě linie sdílejí některá základní syntaktická pravidla a několik základních pojmů, ale jinak se v detailech hodně liší (jiné sady parametrů, rozdílné utility a správa datasetů, rozdílné chování subsystémů pro fronty úloh).
Specifika a často používané konstrukce
- DISP – určuje stav datasetu před a po spuštění (např. OLD, SHR, NEW) a jak s ním nakládat v případě ukončení úlohy (CATLG, DELETE).
- Kondiční zpracování – parametry jako COND nebo instrukce IF/THEN/ELSE umožňují řídit provádění dalších kroků na základě návratových kódů nebo chyb.
- Konkatenační DD – umožňuje spojit více datasetů jako jeden zdroj dat pro daný krok.
- JES (Job Entry Subsystem) – spravuje přijímání, plánování a výstupy jobů; rozšíření JECL poskytuje další kontrolu nad job queue a výstupy.
- Standardní utility – IEBGENER, IEBCOPY, SORT a další jsou často volány z JCL pro kopírování, manipulaci s datasetem nebo třídění dat.
JCL dnes
JCL je i nadále základním mechanismem pro dávkové zpracování na systémech z/OS a dalších IBM mainframech. Moderní provoz často kombinuje JCL s jinými nástroji (skriptovacími jazyky jako REXX, operačními nástroji, job scheduling systémy typu CA-7, Control-M apod.), ale i tak mnohé organizace stále upravují a spravují stovky až tisíce JCL jobů.
Tipy pro práci s JCL
- Dodržujte konzistentní pojmenovávání jobů a DD jmen (usnadní to údržbu a hledání chyb).
- Pečlivě nastavujte DISP a zálohujte kritické datasety před operacemi, které by je mohly smazat.
- Využívejte komentáře (//*) k vysvětlení neintuitivních nastavení.
- Testujte změny v odděleném prostředí, pokud je to možné, zejména při změnách alokací nebo DISP parametrů.
JCL není běžným programovacím jazykem pro implementaci byznys logiky, ale je to klíčový stavební kámen provozu IBM mainframe, protože řídí, kdy a jak se programy spouštějí a jak se nakládá s jejich daty a výstupy.