JCL Operator Messages are mechanisms for jobs to communicate with system operators, request actions, provide status information, or interact with automated operations tools. These messages enable critical human-machine interaction in mainframe batch processing environments.
Key Benefit:
Operator messages facilitate human intervention, decision-making, and oversight for batch jobs, enabling operators to respond to resource requests, approve actions, and monitor critical job status in real-time.
There are several mechanisms for generating operator messages in JCL:
Operator messages can be directed to various destinations:
| Destination | Description | How to Specify | 
|---|---|---|
| System Console | Primary operator console or console pool | Default for WTO and WTOR messages | 
| Specific Console | A particular operator console by ID | ROUTCDE parameter in WTO | 
| Console Group | Functional group of consoles (e.g., tape management) | ROUTCDE parameter in WTO | 
| TSO User | Specific user's terminal session | NOTIFY parameter on JOB statement | 
| System Log (SYSLOG) | System message log | Most console messages are recorded here | 
| Automation Tool | Operations automation software (e.g., IBM NetView, CA OPS/MVS) | Special message formats or descriptors | 
12//MYJOB JOB (ACCT),'MY JOB', // NOTIFY=userid
The NOTIFY parameter sends a message to the specified user when the job completes.
1/*MESSAGE 'This is a message for the operator'
The /*MESSAGE statement sends a message to the operator console when the job is submitted.
1//*OPERATOR 'This is a message for the operator'
The //*OPERATOR statement sends a message to the operator console when the job is interpreted by JES3.
1WTOR 'ENTER Y TO CONTINUE, N TO ABORT',REPLY,1,ECB
This example from an assembler program requests a reply from the operator.
Messages can be classified by various attributes to control their appearance and handling:
| Attribute | Options | Purpose | 
|---|---|---|
| Descriptor Codes | 1-16 | Define the message type and importance (e.g., system failure, immediate action required) | 
| Routing Codes | 1-128 | Determine which consoles receive the message | 
| Message Level | Informational, Warning, Error, Critical | Indicates the severity of the situation | 
| Highlighting | Normal, Intensified, Blinking | Controls the visual prominence of the message | 
| Color | White, Red, Green, Blue, etc. | Visually categorizes messages | 
| Message ID | Description | Typical Response | 
|---|---|---|
| IEF233A | Dataset not found, job is waiting | Provide dataset or cancel job | 
| IEC501A | Mount tape request | Mount tape or redirect to different drive | 
| IEF213I | Job step completed | No action required (informational) | 
| IEF450I | Job abended | Investigate cause of failure | 
| IEA995I | Symptom dump for abend | Examine for problem diagnosis | 
| IEF404I | Job ended | No action required (informational) | 
Operators can issue commands to control job execution. These aren't JCL-generated messages but are the primary way operators respond to jobs:
| Command | Function | Example | 
|---|---|---|
| $C | Cancel a job | $C J123 | 
| $P | Stop a job after current step completes | $P J123 | 
| $A | Release a held job | $A J123 | 
| $H | Hold a job | $H J123 | 
| $D | Display job information | $D J123 | 
| $R | Respond to a WTOR message | $R 123,YES | 
123//BACKUP JOB (ACCT),'DATABASE BACKUP', // NOTIFY=DBADMIN, // CLASS=A,MSGLEVEL=(1,1)
This example sends a job completion notification to the DBADMIN user.
12345678//TAPEJOB JOB (ACCT),'MONTHLY ARCHIVE',CLASS=A /*MESSAGE 'TAPEJOB REQUIRES SCRATCH TAPE - PLEASE MOUNT WHEN REQUESTED' //STEP1 EXEC PGM=BACKUP //TAPE DD DSN=MONTHLY.ARCHIVE, // UNIT=TAPE, // VOL=SER=SCRTCH, // DISP=(NEW,KEEP) //INPUT DD DSN=MONTHLY.DATA,DISP=SHR
This example sends instructions to the operator about tape requirements when the job is submitted.
123456//BIGPROC JOB (ACCT),'MONTHLY PROCESSING', // CLASS=A,TYPRUN=HOLD //*OPERATOR 'BIGPROC REQUIRES 4 HOURS CPU TIME - RELEASE WHEN RESOURCES AVAILABLE' //STEP1 EXEC PGM=MONTHEND //SYSOUT DD SYSOUT=* //INPUT DD DSN=MONTHLY.DATA,DISP=SHR
This example holds the job upon submission and informs the operator to release it when resources are available.
12345//UPDATE JOB (ACCT),'DATABASE UPDATE',CLASS=A /*MESSAGE 'UPDATE JOB WILL REQUIRE OPERATOR CONFIRMATION BEFORE CHANGES' //STEP1 EXEC PGM=DBUPDATE,PARM='CONFIRM=YES' //SYSOUT DD SYSOUT=* //DBDATA DD DSN=PROD.DATABASE,DISP=OLD
This example prepares the operator for an interactive program that will require confirmation before proceeding.
Modern mainframe environments often use automation tools to handle operator messages programmatically:
1/*MESSAGE 'AUTO:TAPEJOB:MOUNT:ARCHIVE001'
This example includes special formatting that an automation tool might parse to automatically handle a tape mount request.
| Issue | Possible Causes | Solutions | 
|---|---|---|
| Message not appearing | Route code issue or suppressed by system settings | 
 | 
| NOTIFY message not received | User not logged on or messaging disabled | 
 | 
| Job waiting indefinitely | Operator missed WTOR message | 
 | 
| Message timing issues | JES2 vs JES3 timing differences | 
 | 
There are important differences in operator message handling between JES2 and JES3:
| Feature | JES2 | JES3 | 
|---|---|---|
| Message statement | /*MESSAGE | //*OPERATOR | 
| Message timing | At job submission | During JES3 interpretation phase | 
| Console integration | Standard MVS console interface | Enhanced JES3 console capabilities | 
| Operator commands | $-prefix commands | *-prefix commands | 
Note:
With z/OS 2.5, JES3 is being phased out in favor of JES2, making JES2-specific behaviors the standard moving forward.