Pyxis Logo
Inicio / Formación IBM / Artículo técnico

Mecanismos de control de scheduling en JES2

Un laboratorio práctico que usa la sentencia JES2 SCHEDULE, HOLDUNTL, y secuenciación dinámica con AFTER y DELAY=YES para controlar jobs batch individuales en el job stream.

16 min read
Publicado 2026-05-18
Pyxis editorial team
Califique este artículo
Calificación media: Sin calificación
Su calificación: Sin calificación
visualizaciones: 0
Ilustración abstracta oscura de scheduling JES2 en el job stream con controles temporales y líneas de dependencia

z/OS proporciona controles nativos de scheduling dentro de JES2 que muchas veces pasan desapercibidos porque muchos entornos dependen de schedulers empresariales como IBM Work Scheduler, BMC Control-M o Broadcom AutoSys Workload Automation. Esos schedulers externos son importantes, pero sigue siendo útil entender lo que JES2 puede hacer por sí mismo para jobs individuales en el job stream.

Este artículo es deliberadamente práctico. Se centra en la sentencia SCHEDULE para jobs individuales y muestra cómo:

  • Mantener un job retenido hasta un momento futuro con HOLDUNTL
  • Crear una dependencia simple entre jobs con AFTER
  • Evitar arranques falsos en una sequenciación dinámica con DELAY=YES

1. Objetivos del laboratorio

Al final de este laboratorio debería poder:

  • Explicar qué hace la sentencia JES2 SCHEDULE
  • Retrasar un job hasta un momento futuro con HOLDUNTL
  • Construir una secuencia simple padre-dependiente con AFTER
  • Entender por qué DELAY=YES importa en la sequenciación dinámica
  • Reconocer los límites prácticos del scheduling nativo JES2

2. Entorno necesario

Para este laboratorio, use:

  • z/OS 2.2 o posterior
  • JES2
  • Acceso TSO/ISPF con permiso para enviar y supervisar jobs batch
  • Acceso SDSF, o cualquier herramienta equivalente que le permita observar los jobs enviados

Nota importante:

  • La sentencia SCHEDULE es una capacidad exclusiva de JES2
  • La sentencia JES2 SCHEDULE fue introducida en z/OS 2.2, por lo que z/OS 3.1 no es el nivel mínimo requerido para los ejemplos de este artículo

3. Qué puede hacer el scheduling nativo JES2

La sentencia SCHEDULE permite especificar atributos de scheduling para un job.

Para este artículo, las cláusulas más útiles son:

CláusulaUso práctico
HOLDUNTLImpide que el job se vuelva elegible para ejecución hasta un momento futuro
AFTERHace que un job espere hasta que otro job termine
BEFOREExpresa el lado inverso de una dependencia
DELAY=YESIndica a JES2 que un job padre o dependiente ausente debe tratarse como “todavía no está aquí”, y no como “ya ha terminado”

El punto principal que debe retener es que estos controles afectan solo a la elegibilidad de un job para ejecución y no sustituyen a un scheduler empresarial completo, aunque son útiles para una sequenciación nativa simple.

4. Limitaciones importantes que es necesario entender

Tenga en cuenta estos puntos:

  • La sentencia SCHEDULE está soportada por JES2, no por JES3
  • Debe aparecer después de la sentencia JOB y antes de la primera EXEC o IF
  • Solo se permite una sentencia SCHEDULE en un job
  • La sequenciación dinámica con BEFORE / AFTER / DELAY=YES es más ligera y más limitada que el uso de un scheduler completo

Ese último punto es importante. La sequenciación dinámica nativa es útil para relaciones pequeñas, pero no es lo mismo que un scheduler de producción completo con calendarios, lógica de restart y gestión de dependencias más rica.

5. Laboratorio 1: retrasar un job hasta un momento futuro

Este primer job muestra la capacidad útil más simple: no dejar que un job enviado se ejecute inmediatamente.

Cree un miembro como SCHHOLD1:

//SCHHOLD1 JOB ,'SCHEDULE LAB',CLASS=A,MSGCLASS=X,NOTIFY=&SYSUID
//         SCHEDULE HOLDUNTL='+00:02'
//STEP1    EXEC PGM=IDCAMS
//SYSPRINT DD  SYSOUT=*
//SYSIN    DD  *
  SET MAXCC=0
/*

Envía el job.

Qué observar:

  • El job entra inmediatamente en JES2
  • Podrá verlo en la Input Queue. No se vuelve elegible para ejecución de inmediato
  • Después de aproximadamente dos minutos, se libera y termina normalmente

Por qué esto importa:

  • Puede enviar trabajo con antelación
  • JES2 impide que el job sea seleccionado hasta la ventana temporal solicitada

Nota práctica:

  • '+00:02' es un intervalo temporal relativo
  • Para un scheduling real de mayor duración, IBM documenta también formas absolutas de fecha y hora para HOLDUNTL

6. Qué es HOLDUNTL y qué no es

HOLDUNTL es útil cuando se quiere retrasar la elegibilidad para ejecución, pero sigue siendo muy simple y limitado en comparación con un scheduler completo.

Es bueno para:

  • Aplazamientos cortos
  • Liberación controlada de jobs
  • Dar tiempo a que un conjunto relacionado de jobs entre en el sistema antes de que se evalúe la lógica de dependencias

No sustituye a:

  • Calendarios empresariales
  • Reglas de festivos
  • Previsión compleja de workloads
  • Cadenas de dependencias repartidas entre muchas aplicaciones y fechas de negocio

7. Laboratorio 2: una secuencia simple padre-dependiente

Ahora construiremos una pequeña secuencia de dos jobs:

  • JOBA crea un data set de prueba
  • JOBB comprueba que el data set existe
  • JOBB no debe ejecutarse antes de que JOBA termine

Cree un único miembro de input stream como SCHSEQ1 con ambos jobs:

//JOBA     JOB ,'SCHEDULE LAB',CLASS=A,MSGCLASS=X,NOTIFY=&SYSUID
//         SCHEDULE HOLDUNTL='+00:02'
//STEP1    EXEC PGM=IEFBR14
//PARENTDD DD  DSN=&SYSUID..SCHEDLAB.PARENT,
//             DISP=(NEW,CATLG,DELETE),
//             SPACE=(TRK,(1,1)),
//             DCB=(RECFM=FB,LRECL=80,BLKSIZE=0)
//* 
//JOBB     JOB ,'SCHEDULE LAB',CLASS=A,MSGCLASS=X,NOTIFY=&SYSUID
//         SCHEDULE AFTER=JOBA,DELAY=YES
//STEP1    EXEC PGM=IDCAMS
//SYSPRINT DD  SYSOUT=*
//SYSIN    DD  *
  SET MAXCC=0
/*

Envíe el miembro una vez para que ambos jobs entren en JES2 casi al mismo tiempo.

Qué observar:

  • JOBA y JOBB entran ambos en el sistema
  • JOBA queda retrasado por HOLDUNTL
  • JOBB permanece inelegible hasta que JOBA termine
  • después de que JOBA termine, JOBB se ejecuta

Esto hace que la demostración sea más limpia porque la dependencia pasa a estar impulsada por AFTER=JOBA, mientras que la retención temporal se aplica solo al job padre.

Resultado funcional esperado:

  • JOBA termina con CC 0000
  • JOBB termina con CC 0000

8. Por qué DELAY=YES importa

Este es uno de los detalles más importantes en la secuenciación nativa JES2.

IBM documenta que AFTER= por sí solo puede producir un falso positivo si el job padre no existe en ese momento. En ese caso, JES2 puede interpretar al padre como “ya se ejecutó y fue eliminado”, haciendo elegible al job dependiente.

DELAY=YES cambia ese significado:

  • Sin DELAY=YES, un job padre ausente puede interpretarse como ya completado
  • Con DELAY=YES, un job padre ausente se trata como todavía no enviado

Por eso el laboratorio anterior usa:

SCHEDULE AFTER=JOBA,DELAY=YES

La combinación es deliberada:

  • AFTER=JOBA expresa la dependencia
  • DELAY=YES evita una liberación falsa

En esta versión, HOLDUNTL se aplica solo a JOBA. Eso mantiene retrasado al job padre, al mismo tiempo que muestra que JOBB espera por causa de AFTER=JOBA. Si ambos jobs quedaran retenidos hasta la misma hora, el ejemplo dejaría de aislar el efecto de AFTER.

9. Un modelo mental útil para la secuenciación nativa

Piense en el modelo nativo JES2 de esta forma:

NecesidadRespuesta nativa JES2
Retrasar un job para más tardeHOLDUNTL
Expresar “ejecutar después del job X”AFTER=X
Expresar “el job X tiene que terminar antes que este job”BEFORE=X
Evitar tratar un job todavía no enviado como ya completadoDELAY=YES

Esto es suficiente para una sequenciación nativa simple, pero sigue siendo intencionadamente ligera.

10. Cuándo esta es una buena elección

Estas capacidades son una buena elección cuando:

  • Necesita una pequeña dependencia local sin un scheduler externo
  • Quiere preparar un pequeño conjunto de jobs para liberación posterior
  • Necesita una solución práctica exclusiva de JES2 para un flujo batch reducido
  • Quiere un prototipo de lógica de sequenciación antes de moverla a un framework de scheduling más amplio

11. Cuándo debería usar algo más robusto

El scheduling nativo JES2 no es la mejor respuesta cuando necesita:

  • Calendarios de negocio
  • Cadenas largas de dependencias entre muchas aplicaciones
  • Lógica robusta de restart y recovery
  • Políticas de balanceo de workload en grandes streams de producción
  • Auditoría central y gobierno del workload

La secuenciación dinámica con BEFORE / AFTER / DELAY=YES es menos robusta y normalmente menos eficiente que JOBGROUP.

Por eso, el mensaje práctico es:

  • Use scheduling nativo JES2 para secuenciación pequeña, local y táctica
  • Use construcciones de scheduler más ricas cuando el workload sea mayor o crítico para el negocio

12. Cleanup

Si quiere eliminar el data set creado por JOBA, envíe:

//SCHCLN1  JOB ,'SCHEDULE LAB',CLASS=A,MSGCLASS=X,NOTIFY=&SYSUID
//STEP1    EXEC PGM=IDCAMS
//SYSPRINT DD  SYSOUT=*
//SYSIN    DD  *
  DELETE '&SYSUID..SCHEDLAB.PARENT'
  IF LASTCC = 8 THEN SET MAXCC = 0
/*

Resumen

Las capacidades nativas de scheduling JES2 son simples, pero útiles.

Los dos patrones más prácticos son:

//JOB1 JOB ...
//     SCHEDULE HOLDUNTL='+00:02'

y:

//JOBB JOB ...
//     SCHEDULE AFTER=JOBA,DELAY=YES

El primero retrasa un job hasta un momento posterior. El segundo crea una dependencia ligera y reduce el riesgo de ejecución prematura por falso positivo.

Usados con cuidado, estos controles le proporcionan una capa práctica de scheduling nativo para jobs individuales dentro de JES2 sin involucrar un scheduler externo.

Documentación útil de IBM

Más en esta área

Más en esta área

Volver a formación
Categoría de artículos

Artículos de z/OS

Consulta todos los artículos técnicos de z/OS en una sola página de categoría.

Abrir categoría z/OS