Spring til indhold

Job Control Language

Fra Wikipedia, den frie encyklopædi

Job Control Language forkortet JCL er et programmeringssprog, som bruges til at beskrive start af programmer på en IBM-mainframe. JCL kom som en del af styresystemet OS/360 og har været med i alle senere versioner uden væsentlige ændringer. En sekvens af programmer, der ønskes afviklet, kaldes i denne sammenhæng for et job.

Strukturen i JCL

[redigér | rediger kildetekst]

Der er kun få kommandoer i JCL. Til gengæld er der masser af parametre. Nogle parametre har selv parametre. Der er store krav til formateringen, så et mellemrum for meget eller for lidt kan gøre at programmet ikke vil virke. Alle linjer med JCL-kommandoer skal starte med //. Kommentarer laves med //* og data, der angives i selve JCL'en afsluttes med /*.

Alt JCL skal starte med en JOB-kommando. Her beskrives, hvad jobbet hedder, og hvordan det overordnet skal afvikles. Formatet er:

//jobnavn JOB 'brugerid', CLASS=x, MSGCLASS=(a,b), REGION=nK, TIME=(m.n)

Brugeridenten fortæller, hvem der skal modtage statusinformation og output. Det er også denne bruger, der vil blive afregnet for brug af CPU-tid og andre ressourcer. CLASS-parametren afgør, hvilken klasse jobbet afvikles i. For hver klasse er det defineret, hvor meget CPU-tid et job højst kan få, og hvordan print og andet output behandles. MSGCLASS bruges til at definere, hvor mange meddelelser, der vises. Første del-parameter bestemmer mængden af systemmeddelelser, mens den anden parameter bestemmer mængden af job-specifikke meddelelser. REGION sætter den maksimale mængde virtuel hukommelse, der må bruges, og TIME bestemmer mængden af CPU-tid. Hvis REGION og TIME ikke er defineret, bruges værdier fra den aktuelle klasse.

Denne kommando bruges til afvikling af et program. Hver EXEC definerer et trin (step) i jobbet. Hver trin har et unikt navn inden for et job. Format:

//trin EXEC PGM=programnavn, PARM="parametre"

Ud over det viste kan CLASS og MSGCLASS mv. defineres her. De nye værdier vil blive brugt i det aktuelle trin.

EXEC PROC udfører en procedure, som er et stykke JCL, der er defineret på forhånd. En procedure kaldes med et navn og en række parametre, der er afhængige af den enkelte procedure. Et kald kan se sådan ud:

//trin EXEC PROC=procedure, param1=foo, param2=bar

DD bruges til at beskrive de dataset (filer), der skal bruges i et enkelt trin. Man skal definere, om et dataset skal findes i forvejen eller om det skal oprettes. Man skal også tage stilling til, om et nyt dataset skal slettes, hvis jobbet skulle fejle. For nye dataset skal der også angives en størrelse. Størrelsen af et dataset beskrives traditionelt som et antal spor eller cylindre på en disk. Nyere udgaver af JCL kan også håndtere angivelser i kilo- og megabytes.

Man bruger også DD til at angive, hvor der skal ledes efter procedurer og programmer. DD kan også bruges til at fortælle, hvor output skal sendes hen.

EKSEMPEL PÅ JCL JOBB

//T4395XXX JOB (6158,TEST),'test',      

//         CLASS=A,                      

//         MSGLEVEL=(1,1),              

//         MSGCLASS=X,                  

//         NOTIFY=&SYSUID                

/*ROUTE PRINT U920                      

//*--------------------------------------

// JCLLIB  ORDER=(CF6T.L4340PO.JCLLIB)  

//*                                      

//S01      EXEC PGM=IKJEFT01,DYNAMNBR=20

// INCLUDE MEMBER=USTEPLIB              

//SYSPRINT DD  SYSOUT=*                  

//SYSABOUT DD  SYSOUT=*                  

//SYSDBOUT DD  SYSOUT=*                  

//SYSTSPRT DD  SYSOUT=*                  

//ABENDAID DD  SYSOUT=*                  

//SYSOUT   DD  SYSOUT=*                  

//SYSTSIN  DD  *                        

DSN SYSTEM(DBKT)                        

RUN PROGRAM(B65IPTG),PLAN(CFXX9599)      

END                                      

/*                                      

//   

Procedurer er skabeloner, hvor der bruges parametre i stedet for konkrete navne på dataset. En procedure er opbygget som følger:

//MINPROC PROC &LIB="TEST.LIBRARY"
// Her sker noget
//PEND