WikiDer > Sprache für die Auftragssteuerung

Job Control Language

Sprache für die Auftragssteuerung (besser bekannt unter der Abkürzung JCL) ist ein Skriptsprache das an IBM-Großrechner wird verwendet, um Befehle an das Job Entry Subsystem (JES2 oder JES3) auszugeben, das einen Stapel ermöglichtProgramm oder Subsystem gestartet werden.

Mit JCL (teure) kann die CPU-Zeit auf Mainframes auf verschiedene Unternehmen aufgeteilt und nach Prioritätscodes über die Zeit verteilt werden.

Syntax

Um mit vorhandener Software kompatibel zu sein, ist die BasisSyntax von JCL, die auch in der aktuellen z/OS verwendet, seit den 1960er Jahren nicht verändert.

JCL zeichnet sich durch das Paar von Schrägstrichen aus, die jeweils den Anfang markieren Aussage. Diese Verwendung von Schrägstrichen als Startmarkierung stammt aus der Zeit, als Lochkarten wurden verwendet, um den JCL-Code einzugeben. Wurde der Lochkartenstapel versehentlich verkehrt herum in den Kartenleser eingelegt, waren die Schrägstriche nicht am Zeilenanfang und der Lochkartenstapel wurde aussortiert.

//USER0001 JOB REKNR01,JORIS,CLASS=7,MSGCLASS=X RECHNUNGEN ERSTELLEN//QUERY EXEC PGM=REKINF,TIME=(,50)//INPUT DD DSN=SYSUSR1.SYSTEM.INPUT,DISP=OPEN SHR//SAVE DD-SYSOUT=*

Eine JCL-Regel muss die folgenden Bedingungen erfüllen:

  • Jede Zeile beginnt mit "//", außer In-Stream-Daten
  • Es gibt maximal 80 Zeichen in einer Zeile.
  • JCL-Befehle werden immer groß geschrieben.
  • Befehle stehen nur zwischen den Positionen 3 und 71; alles ab Position 72 wird als nicht ausführbare Kommentare (zB Zeilennummern) behandelt. Um die Befehlszeile in der nächsten Zeile fortzusetzen, muss die vorherige Zeile mit einem Komma enden.
  • JCL-Befehle bestehen aus drei Blöcken ohne Leerzeichen innerhalb des Blocks:
    • eine freie wahl Name des Befehls (maximal 8 Zeichen), damit darauf verwiesen werden kann
    • das bearbeiten (JOB, EXEC, DD, AUSGABE, ...)
    • das Parameter
      • das Positionsangaben: feste Parameter, die immer in dieser Reihenfolge vorkommen müssen (wenn weggelassen, muss trotzdem ein Komma geschrieben werden)
      • das Schlüsselwörter: Parameterbestimmungen ohne feste Position, die immer aus zwei Mitgliedern bestehen: dem Schlüsselwort und dem Wert, mit einem Gleichheitszeichen dazwischen.
    • Alles was danach kommt wird wie Kommentar berücksichtigt.

JOB

//USR007 JOB ACCN099,JODY,CLASS=6,MSGCLASS=X
  • Nutzername
  • JOB
  • Kontonummer, Jobname und Schlüsselwörter:
    • KLASSE, PRTY: Priorität; Prioritätscodes
    • MSGCLASS
    • TYPRUN: Korrektur lesen mit SCAN, warten mit HOLD
    • ZEIT=(mm,ss): in Minuten und Sekunden
    • REGION: Speicherplatz (in k oder ich (Bytes))
    • NOTIFY: Benutzer-ID, die benachrichtigt werden soll
    • KOND: Bedingung; Stoppbedingung

EXEC

//STEP1 EXEC PGM=EINLESEN,COND=(0,NE),PARM=(SENTENCE=INCREMENTAL,COUNT=100)
  • Name
  • AUSFÜHRUNG: ausführbar
  • PGM, PROC: Programm, Verfahren; Programm- oder Prozedurname und Schlüsselwörter:
    • ZEIT=(mm,ss): in Minuten und Sekunden
    • REGION: Speicherplatz (in k oder ich (Bytes))
    • PAR: Parameter dem auszuführenden Programm geben
    • KOND: Bedingung; Stoppbedingung
    • IF (Bedingung) THEN//ELSE//ENDIF: Bedingungskonstrukt

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. EXPORT//HANDBUCH TT *01.04.198013/09/197910/12/198215/03/1986/*
  • Name
  • DD: Datendefinition
    • FSN: Datensatzname
    • DCB: Datenkontrollblock
      • RECFM: Aufnahmeformat
      • LRECL: lokale Datensatzlänge
    • DSORG: Datensatzorganisation; sequentiell (PS) oder aufgeteilt (Bestellung)

Für bestimmte Datensätze gibt es auch vordefinierte Namen:

  • JOBLIB, STEPLIB: Bibliothek für den entsprechenden Job oder Schritt
  • SYSIN: im Strom Daten
  • SYSABEND, SYSMDUMP, SYSUDUMP, CEEDUMP: deponiert
  • SYSCHK, SYSCKEOV: Kontrollpunkte

EINSCHLIESSEN

//USR009 JOB ACCN099,APRILIA,CLASS=8,MSGCLASS=X//REFERENCE JCLLIB ORDER=(ISUSR.USR007.SOURCE,ISUSR.USR009.SOURCE)//GO EXEC PGM=P3OEF4//STEPLIB DD DSN=ISUSR.COBOLI .LINKLIB,DISP=SHR//ADD INCLUDE MEMBER=OEF3//
  • INCLUDE ermöglicht die Wiederverwendung von Programmcode: Damit kann der Code eines anderen Skripts abgerufen werden. Das Skript muss sich im JCLLIB-Suchpfad befinden.

PROC

//DEMOJCL PROC//STAPA EXEC PGM=OEF7,TIME=(,08),REGION=&SIZE//STEPLIB DD DSN=&PREFIX..COBOL.LINKLIB,DISP=SHR//INPUT DD DSN=&PREFIX..LIST,DISP =SHR// PEND
//PROC12 EXEC DEMOJCL,SIZE=256K,PREFIX=ISUSR

Verfahren ermöglichen modulares Arbeiten; es kann an verschiedenen Stellen aufgerufen werden. Darüber hinaus können variable Parameter verwendet werden: die Et-Zeichen & und der Punkt (falls erforderlich) begrenzen den Parameternamen

JCL-Ausgabe

In dem SPULE (Simultane Peripherieoperationen online) landet die Information zum Korrekturlesen und Ausführen des Skripts. Dazu gehört auch das Skript selbst. Prozeduren, die vom Skript selbst aufgerufen werden, haben das Präfix // anstelle von; den Prozeduren, die mit INCLUDE aus einer anderen Datei eingefügt wurden, wird XX vorangestellt.

Probe Skelett

//SU0003CL JOB(XXXX000),'TEST',CLASS=7,MSGCLASS=X//******************************** **************************************** //** ****/ /* BITTE KURSDATENPRÄFIX IN DER NÄCHSTEN ZEILE FÜLLEN//** ****//**************************** * ******************************************** // JCLPROG PROC PRÄFIX =' .........'//************************************ **** ***************************** //* DAS COBOL-PROGRAMM KOMPILIEREN //***** **** ************************************************* ****** ************//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=* //SY SPRINT 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( &MITGLIED),DISP=SHR //************************************ ******** ************************** //* VERBINDEN SIE DAS COBOL-PROGRAMM BEARBEITEN //**** ******** ****************************************** ****** ********** // 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//

Externe Links