This is similar to Charles, using SDSF, but it captures the output, and writes 
it to DD, you can stack as many commands in there as you wish.

//OPERCMD   EXEC PGM=IKJEFT1B,PARM='%OPERCMDB'            
//SYSEXEC   DD   DSN=your.sysexec.dataset,DISP=SHR      
//SYSIN     DD   *                                        
D ASM                                                     
/*                                                        
//SYSTSIN  DD   DUMMY                                     
//SYSTSPRT DD   DUMMY                                     
//                                                        

/* REXX */                                                                 
/* this REXX exec will issue operator commands via SDSF REXX interface     
   security is based on the person using the command.  this exec is to be  
   used for batch only   */                                                
'EXECIO * DISKR SYSIN (STEM mycmd. FINIS'                                  
if rc > 0 then do                                                          
   say 'Return code from OPEN was' rc                                      
   say 'Aborting...'                                                       
   exit                                                                    
   end                                                                     
                                                                           
/* Allocate results output file  */                                        
ddnm = 'DD'||random(1,99999)                                               
Address TSO "Alloc Fi("ddnm") SYSOUT"                                      
                                                                           
/* Process all input commands    */                                        
Do c=1 to mycmd.0                                                          
 oper_command.0 = 1                                                        
 oper_command.1 = mycmd.c                                                  
 Call Main_process                                                         
End                                                                        
                                                                           
/* Free results output file  */                           
Address TSO "Free Fi("ddnm")"                             
Return 0                                                  
                                                          
Main_process:                                             
/* process all data from SYSIN   */                       
rc=isfcalls('ON')                                         
Address SDSF ISFSLASH "("oper_command.") (WAIT)"          
l_cnt = 0                                                 
If datatype(isfulog.0) = "NUM" Then Do                    
 If isfulog.0 <> 0 Then Do                                
  l_cnt = l_cnt + 1                                       
  l.l_cnt = substr(isfulog.1,1,43)                        
  Do ix=1 to isfulog.0                                    
   ll = length(isfulog.ix)                                
   qdata = substr(isfulog.ix,44,ll-43)                    
   l_cnt = l_cnt + 1                                      
   l.l_cnt = qdata                                        
  End                                                     
 End                                                      
Else Do                                                   
 l_cnt = l_cnt + 1                                        
 l.l_cnt = "No command response available"                
 End                                                          
End                                                           
Else Do                                                       
 l_cnt = l_cnt + 1                                            
 l.l_cnt = "Error in command reponse"                         
End                                                           
rc=isfcalls("OFF")                                            
If (l_cnt = 0) Then Do                                        
 l_cnt = l_cnt + 1                                            
 l.l_cnt = ' /* no data produced */'                          
End                                                           
l.0 = l_cnt                                                   
Address MVS "ExecIO "l_cnt" DiskW "ddnm" (Finis Stem l.)"     
l_cnt = 0                                                     
Return                                                        

_________________________________________________________________
Dave Jousma
Assistant Vice President, Manager, Mainframe Engineering
david.jou...@53.com
1830 East Paris, Grand Rapids, MIĀ  49546 MD RSCB2H
p 616.653.8429
f 616.653.2717

-----Original Message-----
From: IBM Mainframe Discussion List [mailto:IBM-MAIN@LISTSERV.UA.EDU] On Behalf 
Of Charles Mills
Sent: Monday, May 16, 2016 11:38 AM
To: IBM-MAIN@LISTSERV.UA.EDU
Subject: Re: JCL "COMMAND" statements

Don't know the answer to 'normal' but you are welcome to this FWIW

/* CONSCMD: Rexx to issue any arbitrary console command via SDSF */      
rc=isfcalls('ON')                                                 
Address SDSF ,                                                    
  "ISFEXEC '/" || Arg(1) || "'"                                   
rc=isfcalls('OFF')                                                

//stepname EXEC PGM=IRXJCL,                               
//         PARM='CONSCMD  some.console.command      '         
//*             :        :                             :  
//* NAME OF EXEC <------>:                             :  
//* ARGUMENT             :<--------------------------->:  
//SYSEXEC  DD   DSN=pds.where.above.stored,DISP=SHR         

Charles

-----Original Message-----
From: IBM Mainframe Discussion List [mailto:IBM-MAIN@LISTSERV.UA.EDU] On Behalf 
Of Tony Thigpen
Sent: Monday, May 16, 2016 8:21 AM
To: IBM-MAIN@LISTSERV.UA.EDU
Subject: JCL "COMMAND" statements

I have spent most of my life as a z/VSE and z/VM systems programmer, but during 
the last year, I have been managing a couple of z/OS systems in our small 
outsourcing shop.

At this point, I would consider myself just a very knowledgeable, but still 
novice z/OS systems programmer. So, be gentle with your replies. :-) And, 
please don't laugh.

Last night/this morning, I have stumped because I noticed that some JCL set up 
by a previous systems programmer was not working as it appeared it should. [At 
least, until I read the manual.]

We have many jobs set up something like thus:

//STEP1    EXEC PGM=IEFBR14
//COMMD1   COMMAND 'S CICSPTOR'
//WAIT1    EXEC PGM=WAITRCAB,PARM='30'   wait 30 seconds
//STEP2    EXEC PGM=IEFBR14
//COMMD1   COMMAND 'S CICSPDOR'
//WAIT2    EXEC PGM=WAITRCAB,PARM='30'   wait 30 seconds
//STEP3    EXEC PGM=IEFBR14
//COMMD1   COMMAND 'S CICSPAOR1'
//COMMD1   COMMAND 'S CICSPAOR2'
//WAIT3    EXEC PGM=WAITRCAB,PARM='30'   wait 30 seconds
//*

I, of course, though the commands would be synchronized with the execution JCL. 
But, we were seeing timing errors that could not be corrected by just 
increasing the wait timers. So, I started looking for the problem and found 
that all the commands were being issued to the console before the first IEFBR14 
even executed.

I was totally surprised when I found that IBM documents the COMMAND jcl card as 
being processed during the JCL conversion phase and not during the execution 
phase. *And* that a previous systems programmer must not have known it either.

So, now I have 2 questions for the knowledgeable people on the list:

1) Are there any other jcl statements that are executed outside the normal 
execution phase?

2) What is the 'normal' method to issue console commands synchronized with the 
job execution?

--
Tony Thigpen

----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions, send email to 
lists...@listserv.ua.edu with the message: INFO IBM-MAIN

----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions, send email to 
lists...@listserv.ua.edu with the message: INFO IBM-MAIN

This e-mail transmission contains information that is confidential and may be 
privileged.   It is intended only for the addressee(s) named above. If you 
receive this e-mail in error, please do not read, copy or disseminate it in any 
manner. If you are not the intended recipient, any disclosure, copying, 
distribution or use of the contents of this information is prohibited. Please 
reply to the message immediately by informing the sender that the message was 
misdirected. After replying, please erase it from your computer system. Your 
assistance in correcting this error is appreciated.


----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN

Reply via email to