Job Control Language
Job Control Language (zkratka JCL) je v informatice skriptovací programovací jazyk používaný na sálových počítačích firmy IBM. Slouží pro instruování systému, jak spustit dávkové úlohy nebo subsystém. JCL umožňuje efektivní rozdělení drahého strojového času sálového počítače mezi různé úlohy (účtované různým zákazníkům) a rozložení jednotlivých činností v čase v souladu s prioritami jednotlivých úloh.
Termín Job Control Language se používá i jako obecné označení pro různé jazyky, které slouží k podobným účelům, jako například WFL od Burroughs Corporation a OCL od ICL. Tento článek se zabývá specificky jazykem JCL od IBM.
Existují dvě varianty jazyka JCL firmy IBM: jedna pro řadu systémů od DOS/360 po z/VSE a druhá pro řadu od OS/360 po z/OS. Obě sdílejí některá základní syntaktická pravidla a koncepty, avšak jinak jsou značně odlišné.
Syntaxe
Kvůli zachování kompatibility s existujícími programy se základní syntaxe JCL nezměnila od 60. let 20. století a používá se i v posledním operačním systému z/OS firmy IBM.
JCL se vyznačuje dvojicí lomítek, kterými začíná každý příkaz. Jejich používání pochází z doby, kdy se k zadávání úloh používaly balíky děrných štítků. Pokud by byl do snímače děrných štítků omylem vložen balíček štítků neobsahujících úlohu v JCL, štítky nezačínající dvěma lomítky by byly okamžitě odmítnuty a nemohly by způsobit chybnou akci.
//USER0001 JOB UCTO01,JORIS,CLASS=7,MSGCLASS=X ZPRACOVANI FAKTUR //SPLATNE EXEC PGM=FAKTINF,TIME=(,50) //INPUT DD DSN=SYSUSR1.SYSTEM.INPUT,DISP=SHR OPEN //OUTPUT DD SYSOUT=*
Řádky v jazyce JCL musí splňovat následující podmínky:
- Délka řádku je maximálně 80 znaků.
- JCL příkazy se vždy píší velkými písmeny.
- Každý řádek začíná dvojicí lomítek
//
, kromě dat vložených do příkazového proudu - Vlastní příkazy lze psát na pozice 3 až 71; vše od pozice 72 se považuje za komentář (tyto pozice lze použít pro číslování řádků; balík štítků se snadno rozsype a očíslované štítku umožňují jeho správné složení; existovaly stroje realizující přihrádkové řazení schopné štítky podle těchto čísel seřadit). Pokud příkaz pokračuje na dalším řádku, musí řádek končit čárkou.
- JCL příkazy se skládají ze tří částí oddělených mezerami, uvnitř žádné z částí nesmí být žádná mezera:
- uživatelem zvolené jméno příkazu (maximálně 8 znaků), na toto jméno se lze odkazovat v jiných krocích
- příkaz (JOB, EXEC, DD, OUTPUT, ...)
- parametry
- poziční: pevné parametry musí být uvedeny vždy ve správném pořadí (při vynechání parametru musí být použita čárka)
- klíčové: parametry bez pevného místa, které se skládají ze jména parametru a hodnoty, mezi nimiž je znak rovná se.
- Všechno za těmito 3 částmi se považuje za komentář (např.
ZPRACOVANI FAKTUR
aOPEN
v úvodním příkladu).
JOB
//USR007 JOB ACCN099,JODY,CLASS=6,MSGCLASS=X
- jméno uživatele
- JOB
- účtovací číslo, jméno úlohy a klíčové parametry:
EXEC
//KROK1 EXEC PGM=READIN,COND=(0,NE),PARM=(ORDER=INCR,NUM=100)
- jméno kroku
- EXEC: spuštění programu executable
- PGM, PROC: program, procedure; jméno programu nebo procedury a klíčové parametry:
DD
//INPUT DD DSN=ISUSR.USR007.INPUT,DISP=SHR //OUTPUT DD DSN=ISUSR.USR007.OUTPUT,DISP=(NEW,KEEP,DELETE), // DCB=(RECFM=FB,LRECL=80),SDORG=PO, // SPACE=(TRK,(5,3,10)) //OUTPUT2 DD DSN=ISUSR.USR007.OUTPUT,DISP=(NEW,KEEP,DELETE), // REFDD=*.STEP1.OUTPUT //DATA DD * 04/01/1980 13/09/1979 10/12/1982 15/03/1986 /*
- jméno
- DD: definice dat (definice souboru) data definition
- DSN: jméno souboru na disku data set name
- DCB: data control block
- RECFM: formát záznamu
- LRECL: délka logického záznamu
- DSORG: organizace souboru; sekvenční (PS) nebo členěný soubor (knihovna) (PO)
K dispozici jsou také předem specifikované názvy pro některé datové soubory:
- JOBLIB, STEPLIB: knihovna pro příslušnou úlohu nebo krok
- SYSIN: vstupní datový soubor
- SYSABEND, SYSMDUMP, SYSUDUMP, CEEDUMP: dumps
- SYSCHK, SYSCKEOV: kontrolní body checkpoints
INCLUDE
//USR009 JOB ACCN099,APRILIA,CLASS=8,MSGCLASS=X //VERWYZING JCLLIB ORDER=(ISUSR.USR007.SOURCE,ISUSR.USR009.SOURCE) //GO EXEC PGM=P3TST4 //STEPLIB DD DSN=ISUSR.COBOL.LINKLIB,DISP=SHR //APPEND INCLUDE MEMBER=TST3 //
- INCLUDE umožňuje znovupoužití kódu skriptu v jiném skriptu. Skript se musí nacházet v cestě uvedené v JCLLIB.
PROC
//DEMOJCL PROC //KROKA EXEC PGM=TST7,TIME=(,08),REGION=&SIZE //STEPLIB DD DSN=&PREFIX..COBOL.LINKLIB,DISP=SHR //INPUT DD DSN=&PREFIX..LIST,DISP=SHR // PEND
//PROC12 EXEC DEMOJCL,GROOTTE=256K,PREFIX=ISUSR
Procedury umožňují modulární práci; je možné je volat z různých míst úlohy. Navíc umožňují používání proměnných parametrů: jméno parametru začíná znakem ampersand &
a končí tečkou (používanou pouze v případě potřeby).
Výstup JCL
Pro zpracování JCL úloh se používá spooling. Úlohy jsou načteny, zkontrolovány a prováděny. Jednotlivé JCL příkazy se vypisují do výstupu úlohy. V opisu příkazů procedur definovaných jinde ve skriptu se úvodní znaky //
vypisují jako ++
; u procedur vložených pomocí příkazu INCLUDE z jiného souboru se používají znaky XX
.
Ukázka úlohy
//SU0003CL JOB (XXXX000),'TEST',CLASS=7,MSGCLASS=X //********************************************************************** //** **** //* PLEASE FILL IN THE COURSE DATASET PREFIX ON THE NEXT LINE //** **** //********************************************************************** //JCLPROG PROC PREFIX='.........' //********************************************************************** //* COMPILE THE COBOL PROGRAM //********************************************************************** //COB EXEC PGM=IGYCRCTL //STEPLIB DD DSN=SYS3.IGY.V2R1M0.SIGYCOMP.LOCU,DISP=SHR //SYSLIB DD DSN=TBISUSR.JCLCRS.SOURCE,DISP=SHR //SYSLIN DD DSN=&&OBJECT,DISP=(MOD,PASS),SPACE=(CYL,(1,5)) //SYSTERM DD SYSOUT=* //SYSPRINT DD SYSOUT=* //SYSUDUMP DD SYSOUT=* //SYSUT1 DD SPACE=(CYL,(2,5)),UNIT=SYSDA //SYSUT2 DD SPACE=(CYL,(2,5)),UNIT=SYSDA //SYSUT3 DD SPACE=(CYL,(2,5)),UNIT=SYSDA //SYSUT4 DD SPACE=(CYL,(2,5)),UNIT=SYSDA //SYSUT5 DD SPACE=(CYL,(2,5)),UNIT=SYSDA //SYSUT6 DD SPACE=(CYL,(2,5)),UNIT=SYSDA //SYSUT7 DD SPACE=(CYL,(2,5)),UNIT=SYSDA //SYSIN DD DSN=&PREFIX..JCLCRS.SOURCE(&MEMBER),DISP=SHR //********************************************************************** //* LINK EDIT THE COBOL PROGRAM //********************************************************************** //LKED EXEC PGM=IEWL,PARM='LIST,MAP,XREF',COND=(8,LE) //SYSUT1 DD SPACE=(CYL,(1,1)),UNIT=SYSDA //SYSPRINT DD SYSOUT=* //SYSLIB DD DSN=SYS2.COBOL2.LOAD,DISP=SHR // DD DSN=SYS2.COBOL2.SUB.LOAD,DISP=SHR // DD DSN=SYS2.COBOL2.SUB.LPA.LOAD,DISP=SHR // DD DSN=&PREFIX..JCLCRS.LOAD,DISP=SHR //SYSLMOD DD DSN=&PREFIX..JCLCRS.LOAD(&MEMBER),DISP=SHR //SYSLIN DD DSN=&&OBJECT,DISP=(OLD,DELETE) // PEND //**********************************************************************00010000 //CREATSUB EXEC JCLPROG,MEMBER=SUBRETCD //CREATPGM EXEC JCLPROG,MEMBER=PGMRETCD //
Odkazy
Reference
V tomto článku byl použit překlad textu z článku Job Control Language na nizozemské Wikipedii.
Externí odkazy
- What is JCL? (anglicky)
- z/OS V1R6.0-V1R8.0 MVS JCL User's Guide (anglicky)
- z/OS V1R7.0-V1R8.0 MVS JCL Reference Archivováno 19. 8. 2013 na Wayback Machine. (anglicky)
- VSE: A Look at the Past 40 Years (anglicky)
- Computer Chronicles: 1972 - 1981 (anglicky)
- System 370/390 JCL 4th Edition, Gary DeWard Brown (anglicky)
- http://www.ibmmainframes.com/jcls.php – Příklady v JCL (anglicky)
- http://www.ibmmainframes.com/viewforum.php?f=7 – komunitní fórum JCL (anglicky)