Search code examples
proczosjclmvs

z/OS JCL command /*VS command fails when issued in a proc


I'm trying to execute a certain command ("VARY devaddr,OFFLINE") to run automatically during system startup. I can't find where the command should be placed. I tried setting the command in a proc, as follows:

//MYPROG PROC MODULE='IEFBR14'  
/*$VS,'V 0A92,OFFLINE'         
//DOIT   EXEC PGM=&MODULE      
//*  

If I issue a START MYPROG I always get an error:

IEFC452I MYPROG - JOB NOT RUN - JCL ERROR 181 $HASP396 MYPROG TERMINATED
IEE122I START COMMAND JCL ERROR

Yet if I remove the command ('/*$VS,...') from the proc, it starts and completes fine. Also, if I create a job instead of a proc, I can submit it and it completes successfully.

My whole purpose is to have this unit taken offline after every IPL, without operator intervention. Does anybody have experience embedding commands in JCL, or an alternative way to accomplish this?

After cshneid's answer, I have edited my proc as follows:

//MYPROG PROC                          
//TEST   COMMAND  'VARY  0A92,OFFLINE' 

And my console output now looks like:

S MYPROG                                                         
IRR812I PROFILE * (G) IN THE STARTED CLASS WAS USED 121          
        TO START MYPROG WITH JOBNAME MYPROG.                     
$HASP100 MYPROG   ON STCINRDR                                    
VARY  0A92,OFFLINE                                               
IEFC452I MYPROG - JOB NOT RUN - JCL ERROR 124                    
IEF281I 0A92 NOW OFFLINE                                         
$HASP396 MYPROG   TERMINATED                                     
IEE122I START COMMAND JCL ERROR                                  
IEA989I SLIP TRAP ID=X33E MATCHED.  JOBNAME=*UNAVAIL, ASID=0059. 

This seems to be the pattern no matter how I arrange the proc.


Solution

  • There is a better way to have the system automatically run commands at initialization (IPL) time: Use the COMMNDxx Parmlib member. See z/OS MVS Initialization and Tuning Reference for details.

    Create a COMMNDxx member in SYS1.PARMLIB (or in any of the PARMLIBs in the concatenation) and add the command there:

    COM='V 0A92,OFFLINE'
    

    You can place the command in the default member COMMND00 or in any COMMNDxx member and add the xx suffix to the list of command members to execute, i.e to the CMD=... parameter in the IEASYSxx member.