Job Control Language (JCL) er en betegnelse for scriptingsprog, der anvendes på IBM mainframe-operativsystemer. JCL instruerer systemet om, hvordan det skal køre et batchjob eller starte et undersystem, hvilke programmer der skal køres, og hvilke filer eller enheder der skal bruges til input og output.

Formålet med JCL er primært at beskrive jobmets struktur og ressourcer — ikke at skrive programlogik. JCL angiver eksempelvis hvilke trin (steps) der skal køres, hvilke eksekverbare programmer (PGM) eller katalogiserede procedurer (PROC) der skal startes, hvilke dataområder (DD-udsagn) der skal forbindes, samt betingelser for fejlhåndtering og betinget spring (f.eks. COND eller IF/THEN/ELSE).

Grundlæggende elementer i JCL

  • JOB-udsagnet – definerer jobmet som helhed (kontooplysninger, brugernavn, prioritet mv.).
  • EXEC-udsagnet – specificerer et trin i jobmet, normalt hvilket program eller hvilken procedure der skal køres (f.eks. EXEC PGM=IEBGENER eller EXEC PROC=MYPROC).
  • DD (Data Definition) – fortæller systemet hvilke filer/enheder der skal være tilgængelige for et programtrin (f.eks. DD DSN=MIN.DATA.SET,DISP=SHR eller DD SYSOUT=*).
  • Jobstyring og fejlhåndtering – betingelser som COND= og nyere blok-strukturer som IF/THEN/ELSE/END gør det muligt at styre, hvilke trin der køres afhængigt af return codes.
  • PROC og katalogiserede procedurer – genanvendelige sæt af JCL-udsagn, der kan katalogiseres og kaldes fra flere job.

Eksempel på simpel JCL

Et typisk, forenklet eksempel på JCL ser sådan ud:

 //MYJOB   JOB  (ACCT),'EKSEMPEL',CLASS=A,MSGCLASS=X //STEP1   EXEC PGM=IEBGENER //SYSUT1  DD   DSN=BRUGER.INPUT,DISP=SHR //SYSUT2  DD   DSN=BRUGER.OUTPUT,DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,SPACE=(TRK,(1,1)) //SYSIN   DD   DUMMY //SYSOUT  DD   SYSOUT=* 

Her starter MYJOB, STEP1 kører programmet IEBGENER, og DD-udsagnene knytter input- og outputfiler til programmet. Dette er et minimalt eksempel — reelle job kan være meget mere komplekse med flere trin og specialiserede parametre.

Forskelle mellem JCL-varianter

  • Der findes to hovedlinjer af IBM Job Control-sprog: en, der stammer fra DOS/360 og som senest findes i z/VSE; og en anden, fra OS/360 til z/OS, hvor sidstnævnte også inkluderer JES-udvidelser kaldet Job Entry Control Language (JECL). De deler nogle grundlæggende koncepter, men syntaks, tilgængelige parametre og driftssubsystemer kan være væsentligt forskellige.
  • På z/OS spiller JES (JES2/JES3) en central rolle for køstyring og spooling, mens z/VSE har sin egen måde at håndtere jobkørsel og ressourcer på.

Praktisk brug og værktøjer

JCL benyttes typisk til batchbehandling: daglige job, backuprutiner, massetransformationer eller kørsel af vedligeholdelsesværktøjer. Almindelige mainframe-utility-programmer, der ofte kaldes fra JCL, er f.eks. IEBGENER, IDCAMS, SORT/DFSORT og forskellige IBM- eller tredjeparts-utilities til filhåndtering og rapportgenerering.

Tips og bedste praksis

  • Skriv klare kommentarer i JCL (kommentarlinjer starter ofte med //*), så andre forstår jobmets formål og afhængigheder.
  • Brug katalogiserede procedurer (PROC) til at genbruge standardiserede jobtrin og reducere fejl.
  • Test ændringer i et udviklingsmiljø, før de flyttes til produktion — små ændringer i DISP, UNIT eller SPACE kan have store konsekvenser.
  • Overvåg return codes (RC) fra kaldte programmer og anvend passende fejlhåndtering via COND eller IF/THEN/ELSE.

Selvom JCL kan virke gammeldags sammenlignet med moderne scriptsprog, er det et kraftfuldt og meget brugt værktøj i mainframe-miljøer, hvor stabil batch-behandling og præcis styring af store datamængder er kritisk.