Job Control Language (JCL) on IBM:n suurtietokoneiden käyttöjärjestelmissä käytettävien komentosarjakielten yleisnimi. JCL:n tehtävä on ohjeistaa järjestelmää eräajon (batch) suorittamisesta: mitä ohjelmia ajetaan, millä syötteillä ja mihin tulosteet ohjataan, sekä millä ehdoilla tiettyjä vaiheita suoritettava tai ohitettava. JCL ei ole yleiskäyttöinen ohjelmointikieli siinä mielessä kuin COBOL tai PL/I, vaan kontrollikieli, joka kuvaa erätyön rakennetta ja laitteisto-/tiedostoresursseja.
JCL:n päälinjat
IBM:llä on kehitetty kaksi pääasiallista JCL-linjaa, jotka eroavat toisistaan ja ovat kehittyneet eri käyttöjärjestelmäperheiden mukana:
- linja, joka juontaa juurensa DOS/360:stä ja jatkuu z/VSE:hen (eli VSE-perhe); ja
- linja, joka alkaa OS/360:stä ja jatkuu z/OS:ään, johon liittyy ns. JES-laajennukset (Job Entry Control Language, JECL) ja lisäominaisuuksia eräohjaukseen.
Näillä linjoilla on yhteisiä syntaksin perussääntöjä ja käsitteitä (esim. JOB-, EXEC- ja DD-rakenteet), mutta toteutukset, laajennukset ja käytännöt vaihtelevat merkittävästi. Myös erilaisten JES-ympäristöjen (esim. JES2, JES3) vaikutus näkyy z/OS-maailmassa.
Perusrakenne ja tyypilliset lauseet
Useimmat JCL-työt rakentuvat kolmesta päätyypistä lauseita:
- JOB — työn tunniste ja parametrit (esim. omistaja, prioriteetti, työtilauksen nimi).
- EXEC — määrittelee suoritettavan ohjelman tai kutsuttavan proseduurin (PROCs).
- DD (Data Definition) — määrittelee tiedostot ja laitteet, joita ohjelma käyttää (syöte/ulos, luettelointi, väliaikaistiedostot).
JCL:ssa on sekä avainsana- että positiorakenteita, ja monia parametreja annetaan avainsanoina (esimerkiksi DISP=, UNIT=, SPACE=, SYSOUT=). Historiallisesti JCL kirjaimellisesti asetettiin korttipinoon, mistä on periytynyt tiukka sarakkeistus (esim. JCL-rivit alkavat usein kahdella kauttaviivalla //). Nykyisissä ympäristöissä korttirajoitukset eivät ole fyysisesti voimassa, mutta niiden periaatteet näkyvät syntaksissa.
Edistyneet ominaisuudet ja käytännöt
JCL tukee esimerkiksi:
- procedures (PROCs) ja instream-procedures, jotka mahdollistavat toistuvien työkuvioiden uudelleenkäytön;
- konditionaalista suorittamista COND= sekä IF/THEN/ELSE/ENDIF -rakenteiden muodossa;
- tietueiden ketjutusta (DD-kokoonpanon concatenation), jolloin useita tiedostoja käsitellään yhtenä loogisena syötteenä;
- erilaisten laitetyyppien ja tietokantamuotojen (esim. PDS, PDSE, GDG) hallintaa;
- järjestelmän paluuarvoihin (return/condition codes) perustuvaa virheenkäsittelyä ja vaiheiden ohittamista.
Käyttötapaukset ja hallinta
JCL on tyypillisesti käytössä suurissa eräajoympäristöissä, joissa ajetaan tietojen massakäsittelyä, raportointia, varmuuskopioita ja tuotantoprosesseja. Järjestelmäoppaat, proseduurikirjastot ja katalogoidut PROCit ovat keskeisiä hallinnan välineitä, ja järjestelmävalvojat (sysadm) määrittävät usein organisaation hyviksi todetut JCL-käytännöt ja turvarajoitukset.
Erot VSE- ja z/OS-linjojen välillä
Vaikka perusajatus on sama, käytännön erot voivat olla huomattavia: parametrit, laitetunnisteet, JES-laajennukset (esim. erityiset JES-job- ja output-ohjaukset), sekä tietyt avainsanat ja niiden merkitykset vaihtelevat. z/OS-ympäristössä JECL laajentaa JCL:ää erityisillä komentorakenteilla ja palveluilla, joita tarvitaan monimutkaisemman eräajon ja tulosteiden hallintaan.
Esimerkkimainen JCL-rivi (yksinkertaistus)
//MYJOB JOB (ACCT),'NIMI',CLASS=A,MSGCLASS=X //STEP1 EXEC PGM=MYYKSIOHJELMA //INFILE DD DSN=KAYTTAJA.SYOTE.DATA,DISP=SHR //OUTFILE DD DSN=KAYTTAJA.TULOS.DATA,DISP=(NEW,CATLG,DELETE), UNIT=SYSDA,SPACE=(TRK,(5,5))
Tämä esimerkki havainnollistaa työn tunnistusta (JOB), yhden vaiheen (EXEC) ja siihen liittyviä DD-määrittelyjä syötteelle ja tulosteelle.
Yhteenveto
JCL on uusiutumiskykyinen ja keskeinen osa IBM:n isäntäjärjestelmien eräajojärjestelmää. Sen oppiminen vaatii käsitteiden, parametrien ja organisaation käytäntöjen tuntemusta, mutta se tarjoaa tarkan ja tehokkaan tavan hallita massiivisia käsittelytyökuormia ja liittää yhteen ohjelmia, tiedostoja ja laitteita tuotantoympäristössä.