Saber de manera automática cuando un jcl termine mal

Todo lo referido a automatizadores de consola u otros (CONTROL-O, System Automation, etc)
Responder
ranas26

Saber de manera automática cuando un jcl termine mal

Mensaje por ranas26 » 05 May 2012, 00:41

Hola a toda la comunidad de Tierra de Dinosaurios, me presento soy Juan Carlos y soy nuevo en el foro, llevo tres años en este maravilloso mundo del mainframe despues de la breve presentación quisiera pedirles su ayuda para un problema que se me presento y quisiera saber si alguno de ustedes se ha encontrado con algo similar.

Mi problema es el siguiente: De todos los procesos batch que se ejecutan a lo largo del día y su mayoría en la noche quiero saber la manera en que de manera automática me notifique cuando alguno termine con error, mi mayor duda es como puedo acceder a las salidas de todos los jcl's, ¿con algun programa en cobol se puede hacer? y ademas que la salida que tome del jcl erroneo la voy a conectar a una aplicacion en java para que por correo me envie un mensaje alertandome que mi job termino mal.

Espero haberme dado a entender ya que lo que me interesa saber es la parte del mainframe el como acceder a todas las salidas de los jcl que terminaron mal.

Agradezco si alguien de ustedes pudiera orientarme el como puedo hacerlo o darme algunas ideas.

Saludos a todos.

jmacaya

Re: Saber de manera automática cuando un jcl termine mal

Mensaje por jmacaya » 05 May 2012, 16:05

Hola Juan Carlos:

Aprovecho para presentarme ya que es mi primer mensaje en el foro. Yo me llamo Jaime, y trabajo en Madrid desde hace unos meses. Llevo unos 3 meses en este mundo del mainframe. El otro día estuve revisando un poco de documentación de IBM porque necesitabamos una ejecución condicional de unos pasos un pelín especial, y mientras lo leía vi que puedes obligar a que se ejecuten pasos de un JCL cuando un paso ha terminado mal. Te dejo el enlace a la documentación propia de IBM que podría servirte para tu caso.

http://publibz.boulder.ibm.com/cgi-bin/ ... 1958&CASE=

Se me ocurre que podrías obligarle en esos casos a enviar los dataset que te interesen a una ruta de red (que luego monitorices a mano o mediante algún software), copiarlos a un algún GDG especial donde almacenes las incidencias de tus JCLs... En fin, queda un poco limitado a tu imaginación y a tus permisos dentro de la instalación.

munotar

Re: Saber de manera automática cuando un jcl termine mal

Mensaje por munotar » 06 May 2012, 19:28

Hola Juan Carlos, para saber si un jcl o incluso un paso de un jcl ha fallado, puedes incluir en cada uno de ellos un paso que te controle los pasos que quieres y que controlando el return codee de dicho paso te envíe un mensaje al correo electrónico que corresponda. Tambien puedes realizar ese trabajo a traves del control-m y que me parece mas cómodo. En estos momentos no tengo un ejemplo para darte, pero si estas interesado en esta solución dimelo y te busco un ejemplo.

gonzalocengo
Usuario
Usuario
Mensajes: 5
Registrado: 02 Feb 2012, 12:36
País: España
Ciudad: Madrid
Ocupación: Administrador de storage

Re: Saber de manera automática cuando un jcl termine mal

Mensaje por gonzalocengo » 07 May 2012, 05:30

Estas dos respuestas son muy adecuadas, pero se me ocurre que tu no quieras o no puedas modificar los JCLs, y que lo único que te interese sea un proceso que monitorize las salidas y te informe de alguna manera. Yo para eso utilizaría el REXX Support para SDSF. Hay un redbook que se llama : "Implementing REXX Support in SDSF", disponible en la web de los redbooks de IBM: http://www.redbooks.ibm.com/.
Incluso tiene un capítulo que se llama "SDSF Support for the COBOL language".

Un saludo

ranas26

Re: Saber de manera automática cuando un jcl termine mal

Mensaje por ranas26 » 08 May 2012, 01:46

Hola a todos por su pronta respuesta todas y cada una de ellas me ha parecido super util solo que como comenta gonzalocengo no tengo acceso a modificar los jcl y la opción que me propone de usar rexx me ha parecido muy atractiva solo que tengo un problemilla nunca he usado rexx, seria mucho pedir si me ayudaras poniendo algun ejemplo de como usar el rexx aunque es momento que empieze a aprender algo nuevo.

Munotar nunca habia visto lo de mandar mail por jcl me gustaria si me proporcionaras un ejemplillo por si en algun momento puedo tener acceso a modificar los jcl me gustaria intentar esa opción.

Por lo mientras intentare la opción de gonzalocengo y jmacaya tambien muchas gracias por tu propuesta en verdad hay mucha gente talentosa y sobre todo dispuesta a ayudaren este foro gracias a todos.

Avatar de Usuario
Vicente
Colaborador avanzado
Colaborador avanzado
Mensajes: 545
Registrado: 21 Jul 2011, 04:52
País: España
Ciudad: Malaga
Ocupación: Técnico en Sistemas

Re: Saber de manera automática cuando un jcl termine mal

Mensaje por Vicente » 08 May 2012, 06:26

Hola ranas26.
REXX es el lenguaje de programación estandar para trabajos de sistemas en zOS.
Aunque es un lenguaje fácil de utilizar, si no tienes experiencia, deberías empezar leyendo los dos manuales más importantes de REXX (guia de usuario y guía de referencia).
A continuación tienes un ejemplo de ejecución del programa REX009, que reside en la librería
VICENTE.LIBRERIA.REXX

//REX EXEC PGM=IKJEFT01,DYNAMNBR=30,REGION=4096K
//SYSEXEC DD DSN=VICENTE.LIBRERIA.REXX,DISP=SHR
//SYSPRINT DD SYSOUT=C
//SYSTSPRT DD SYSOUT=B
//SYSTSIN DD *
%REX009
/*

Código fuente de REX009:

/* REXX MI PRIMER PROGRAMA REXX */
SAY 'HOLA'
x = 2 + 2
SAY '2 + 2 =' x

Leamos un poco:
TSO/E REXX User's Guide
TSO/E REXX Reference
Varios días probando, equivocandote y volviendo a probar
pueden ahorrarte quince minutos de lectura de un manual.

Avatar de Usuario
Vicente
Colaborador avanzado
Colaborador avanzado
Mensajes: 545
Registrado: 21 Jul 2011, 04:52
País: España
Ciudad: Malaga
Ocupación: Técnico en Sistemas

Re: Saber de manera automática cuando un jcl termine mal

Mensaje por Vicente » 08 May 2012, 06:30

Hola ranas26

A continuación tienes un ejemplo de envío de correo.
Requiere que esté arrancada la tarea SMTP y configurada para leer listados, en este caso, de la clase 8.

//EMAIL EXEC PGM=IEBGENER
//SYSOUT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSIN DD DUMMY
//SYSUT2 DD SYSOUT=(8,SMTP)
//SYSUT1 DD *
HELO ZOS1
MAIL FROM:<usuario1@dominio1.com>
RCPT TO:<usuario2@dominio2.com>
DATA
Subject: VICENTE prueba de correo
Primera línea del cuerpo del correo
Segunda línea del cuerpo de correo
/*

Para uso y configuración de SMTP.
Leamos un poco:
Communication Server: IP Configuration Guide
Communication Server: IP Configuration Reference

Saludos
Varios días probando, equivocandote y volviendo a probar
pueden ahorrarte quince minutos de lectura de un manual.

gonzalocengo
Usuario
Usuario
Mensajes: 5
Registrado: 02 Feb 2012, 12:36
País: España
Ciudad: Madrid
Ocupación: Administrador de storage

Re: Saber de manera automática cuando un jcl termine mal

Mensaje por gonzalocengo » 13 May 2012, 06:41

La verdad es que no es una tarea sencilla, y como dice Vicente, REXX es el lenguaje que deberás aprender si quieres hacer cosas complicadas.
No tengo un ejemplo de esto que dices, yo hasta ahora solo lo he usado para mandar un comando e interceptar la salida. Para esto venía un ejemplo en el manual, que yo he modificado.
Podrías mirar a ver si hay un ejemplo para la tarea de leer la salida de un job, y ver si puedes adaptarla. Si la encuentras, dímelo y con gusto te hecho una mano para adaptarlo,

Un saludo

NJB
Su anfitrion
Su anfitrion
Mensajes: 1114
Registrado: 12 Oct 2003, 16:27
País: Argentina
Ciudad: Capilla del Señor
Ocupación: System Programmer
Contactar:

Re: Saber de manera automática cuando un jcl termine mal

Mensaje por NJB » 13 May 2012, 10:48

Hola

Sin meterme en el tema específico me gustaría aclarar algunos conceptos.

El lenguaje REXX es universal, es decir es identico y portable a cualquier plataforma, desde CMS (VM) que fue donde nacio, MVS (Zos) o lo que se les ocurra.

Lo que no es portable son los comandos externos que usamos en el, por ejemplo execio que NO ES REXX, es un comando externo. Pongo este solo a m ode de ejemplo, pero la cantidad de comandos externos es tan grande como querramos, ademas de lo normales del entorno en el cual corre podemos mediante el comando address dirigir comandos externos al entorno que sea, siempre y cuando este esté disponible en la instalación.

Los comandos externos son los que setean el RC y ninguna sentencia rexx lo hace. Esto es solo para los que recien arrancan lo vean mas claramente.

En cuanto al tema original de este post (sin modificar el JCL) a mi se me ocurren dos maneras:
a) Capturar el msg del notify del job, cosa bastante incómoda ya que si o si se debe mandar al brodcast y luego listarlo con un LISTBC (comando de TSO), aunque algo si se debe mofificar en el JCL, si bien es mínimo.
b) Leer el spool y de ahi sacar el estado de cada job, una vez que el mismo esta terminado leer la salida. Lo primero con el comando STATUS de TSO y lo segundo con el comando OUTPUT de TSO.

La opción B es realizable con REXX y comandos de TSO, pero debes saber los nombres de los jobs y ademas tener los correspondientes permisos de RACF para acceder a esa info en el spool.

Es obvio que lo mejor es tener un scheduler (cualquiera) que lleve el control y de aviso.

Si la quieres complicar puedes acceder directamente al SPOOL (hay varias formas) pero si bien puedes hacerlo con REXX accediendo a la copia del checkpoint en memoria común lo usual es hacerlo en assembler ya sea con la copia en memoria o al spool directamente con las macros provistas con el JES.

Espero no haberte complicado pero las cosas son así hasta donde se, desde ya no tengo la verdad absoluta, solo unos cuantos años de experiencia y puede haber otra forma de hacerlo que yo no conozca.

Te mando un cordial saludo.
Norberto Bocalandro

Responder