IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

z/OS Discussion :

Ordonnanceur de job


Sujet :

z/OS

  1. #1
    Candidat au Club
    Inscrit en
    Novembre 2007
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Ordonnanceur de job
    Bonjour,

    n'ayant pas d'ordonnanceur type OPC, j'aimerais savoir s'il est possible de créer un JCL simple lançant d'autres job, avec contrôles d'exécution.

    J'ai vu sur le net que l'on peut lancer plusieurs job à partir d'un JCL avec IEBGENER.
    Si l'on ajoute un COND=(04,LT), le JCL lanceur teste uniquement la bonne exécution de IEBGENER, et non pas celle du job lancé.

    par ex.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    //JOB1   EXEC  PGM=IEBGENER   
    //SYSUT1   DD  DSN=AA.BBBBBB.JCL(JCL1),DISP=SHR                         
    //SYSUT2   DD  SYSOUT=(,INTRDR)             
    //SYSPRINT DD  SYSOUT=*                     
    //SYSIN    DD  DUMMY                        
    //*                                         
    //JOB2   EXEC  PGM=IEBGENER,COND=(4,LT)   
    //SYSUT1   DD  DSN=AA.BBBBBB.JCL(JCL2),DISP=SHR                         
    //SYSUT2   DD  SYSOUT=(,INTRDR)             
    //SYSPRINT DD  SYSOUT=*                     
    //SYSIN    DD  DUMMY                        
    //*                                         
    //JOB3   EXEC  PGM=IEBGENER,COND=(4,LT)   
    //SYSUT1   DD  DSN=AA.BBBBBB.JCL(JCL3),DISP=SHR                         
    //SYSUT2   DD  SYSOUT=(,INTRDR)             
    //SYSPRINT DD  SYSOUT=*                     
    //SYSIN    DD  DUMMY                        
    //*
    Les 3 Job JCL1, JCL2 et JCL3 vont être lancés à la suite.
    Je voudrais lancer JCL2 quand JCL1 s'est bien terminé, et JCL3 quand JCL2 s'est bien terminé.
    En fait, il s'agit de faire un mini OPC très simplifié.

    Ou alors, une autre solution, sans utilisation de FileAID ni PDSMAN (on n'a pas).

    Merci pour vos réponses.

  2. #2
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2005
    Messages
    1 473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 473
    Points : 3 283
    Points
    3 283
    Par défaut
    Une suggestion :

    Le premier JOB contient :
    = un premier STEP pour le travail effectif
    = un second STEP de recopie sur l'INTERNAL READER conditionné par la bonne fin du STEP précédent

    et ainsi de suite pour les JOB suivants.

    Par exemple (ici avec un IEFBR14) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    //IEBFR14 EXEC PGM=IEFBR14
    // IF RC=0 THEN
    //IEBGENER EXEC PGM=IEBGENER
    //SYSPRINT DD SYSOUT=*
    //SYSIN DD DUMMY
    //SYSUT1 DD < second JOB >
    //SYSUT2 DD SYSOUT=(A,INTRDR)
    // ENDIF

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 20
    Points : 23
    Points
    23
    Par défaut
    Plutot que de mettre tes 3 lanceurs dans le meme JCL

    Met chaque lanceur a la fin du JCL afin que ce soit lui qui lance le suivant si ca se passe bien

    En dernier STEP de JCL1, tu met ton STEP JOB2 qui lance JCL2
    et en dernier STEP de JCL2, tu met ton STEP JOB3 qui lance JCL3


    En fait tu as donné ta solution dans cette phrase
    Citation Envoyé par Naitsirk Voir le message
    Je voudrais lancer JCL2 quand JCL1 s'est bien terminé, et JCL3 quand JCL2 s'est bien terminé.

  4. #4
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2005
    Messages
    1 473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 473
    Points : 3 283
    Points
    3 283
    Par défaut
    Citation Envoyé par minosubb Voir le message
    ...
    Met chaque lanceur a la fin du JCL afin que ce soit lui qui lance le suivant si ca se passe bien

    En dernier STEP de JCL1, tu met ton STEP JOB2 qui lance JCL2
    et en dernier STEP de JCL2, tu met ton STEP JOB3 qui lance JCL3
    Oui, c'est exactement ce que j'ai écrit ...

  5. #5
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2012
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2012
    Messages : 41
    Points : 108
    Points
    108
    Par défaut Lanceur écrit avec des cartes JCL
    Alors voici le lanceur que j'utilise souvent.

    L'utilisateur modifie éventuellement $LANCE en choisissant la carte SORTIN référençant la liste des JCL à exécuter (un exemple dans $LISTE1) et soumet le Job.
    Au cas où un des JCL de la liste se plante, l'utilisateur doit corriger et soumettre le Job $LANCE2 qui est créé en cours de processus (il peut aussi utiliser le SJ de SDSF).

    Note : les JCL ne doivent pas comporter la carte de fin d'exécution (// suivi de blancs), sinon le lanceur s'arrête en cours de route. De même, bien vérifier qu'on a pas laissé de RESTART intempestifs.

    Note : les cartes JOB et le nom du PDS USER.RE7.INTEGRAT.MOE doivent être customisés pour votre environnement. Les membres ZZLIST0 ZZLIST1 ZZCART2 $LANCE2 et ZZLEJOB seront créés à vide avant la première exécution du lanceur.

    Note : le programme SYSAPPEL devrait être spécifique de mon environnement. Ce programme ne fait qu'envoyer un message de bonne fin à l'utilisateur et peut donc être laissé de coté (en attendant une solution )

    $LANCE
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    //LANCEUR  JOB (XXXx,Y),LANCE,MSGCLASS=K,CLASS=D,
    //      NOTIFY=&SYSUID
    //RECOP1   EXEC PGM=SORT
    //SORTIN   DD DISP=SHR,DSN=USER.RE7.INTEGRAT.MOE($LISTE1)   INIT
    //*SORTIN   DD DISP=SHR,DSN=USER.RE7.INTEGRAT.MOE($LISTE2)   DEBUT JOURNEE 
    //*SORTIN   DD DISP=SHR,DSN=USER.RE7.INTEGRAT.MOE($LISTE3)   VACATION 
    //SYSOUT   DD SYSOUT=X
    //SORTOUT  DD DISP=SHR,DSN=USER.RE7.INTEGRAT.MOE(ZZLIST0)  LISTE ELAGUEE 
    //SYSIN    DD *
       INCLUDE COND=(1,3,CH,NE,C'//*')
       SORT FIELDS=COPY   
    //*     SOUMISSION DU LANCEUR 1
    //DEMARRE  EXEC PGM=IEBGENER
    //SYSOUT   DD SYSOUT=X
    //SYSPRINT DD SYSOUT=X
    //SYSUT1   DD DISP=SHR,DSN=USER.RE7.INTEGRAT.MOE(ZZLANCE1)
    //SYSUT2   DD SYSOUT=(,INTRDR),DCB=(RECFM=FB,LRECL=80)
    //SYSIN    DD DUMMY
    //*
    $LISTE1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    //*   
    //*     EXEMPLE DE LISTE DES JOBS A PASSER    
    //*     
    //SYSUT1  DD DISP=SHR,DSN=USER.RE7.INTEGRAT.MOE(INITPH1)
    //SYSUT1  DD DISP=SHR,DSN=USER.RE7.INTEGRAT.MOE(INITPH2)
    //SYSUT1  DD DISP=SHR,DSN=USER.RE7.INTEGRAT.MOE(MAJDATE)
    //SYSUT1  DD DISP=SHR,DSN=USER.RE7.AUTREBIB(INITDB)  <== BIB DIFFERENTE
    //*
    ZZLANCE1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    //LANCE1 JOB (XXXx,Y),LANC1,MSGCLASS=K,CLASS=D
    //*  SELECTION DU PREMIER JOB DE LA LISTE
    //SELECT  EXEC PGM=IDCAMS
    //LISTE    DD DISP=SHR,DSN=USER.RE7.INTEGRAT.MOE(ZZLIST0)
    //PREMIER  DD DISP=SHR,DSN=USER.RE7.INTEGRAT.MOE(ZZCART2)
    //SYSIN    DD *
       REPRO INFILE(LISTE) OUTFILE(PREMIER) COUNT(1)
    //*  FIN DU LANCEUR SI PLUS DE JCL DANS LA LISTE ELAGUEE
    //    IF RC = 4 THEN
    //MSGFIN1  EXEC PGM=SYSAPPEL,
    //    PARM='SE ''FIN NORMALE DU LANCEUR'',USER=(&SYSUID)'
    //MSGFIN2  EXEC PGM=SYSAPPEL,
    //    PARM='SE ''FIN NORMALE DU LANCEUR'',USER=(&SYSUID)' 
    //MSGFIN3  EXEC PGM=SYSAPPEL,
    //    PARM='SE ''FIN NORMALE DU LANCEUR'',USER=(&SYSUID)'
    //    ENDIF
    //*  RECONSTITUTION DU LANCEUR2
    //CRELANC2 EXEC PGM=IDCAMS
    //CARTES   DD DISP=SHR,DSN=USER.RE7.INTEGRAT.MOE(ZZCART1)
    //         DD DISP=SHR,DSN=USER.RE7.INTEGRAT.MOE(ZZCART2)
    //         DD DISP=SHR,DSN=USER.RE7.INTEGRAT.MOE(ZZCART3)
    //LANC2    DD DISP=SHR,DSN=USER.RE7.INTEGRAT.MOE($LANCE2)
    //SYSPRINT DD SYSOUT=X
    //SYSIN    DD *
       REPRO INFILE(CARTES) OUTFILE(LANC2) 
    //*  RECOPIE DE LA LISTE ELAGUEE HORMIS LE PREMIER
    //HORMIS    EXEC PGM=IDCAMS
    //LISTE    DD DISP=SHR,DSN=USER.RE7.INTEGRAT.MOE(ZZLIST0)
    //SAUF1    DD DISP=SHR,DSN=USER.RE7.INTEGRAT.MOE(ZZLIST1)
    //SYSPRINT DD SYSOUT=X
    //SYSIN    DD *
       REPRO INFILE(LISTE) OUTFILE(SAUF1) SKIP(1)
       IF MAXCC = 12 THEN SET MAXCC = 1 
    //*   RECOPIE SUR ZZLIST0 ==> PRET A RECOMMENCER
    //NEWLIST0 EXEC PGM=IDCAMS,COND=(1,LE,HORMIS)
    //LIST1    DD DISP=SHR,DSN=USER.RE7.INTEGRAT.MOE(ZZLIST1)
    //LIST0    DD DISP=SHR,DSN=USER.RE7.INTEGRAT.MOE(ZZLIST0)
    //SYSPRINT DD SYSOUT=X
    //SYSIN    DD *
       REPRO INFILE(LIST1) OUTFILE(LIST0)  
    //*   SOUMISSION DU LANCEUR 2
    //SOUMET2  EXEC PGM=IEBGENER,COND=(1,LE,HORMIS)
    //SYSOUT   DD SYSOUT=X
    //SYSPRINT DD SYSOUT=X
    //SYSUT1   DD DISP=SHR,DSN=USER.RE7.INTEGRAT.MOE($LANCE2)
    //SYSUT2   DD SYSOUT=(,INTRDR),DCB=(RECFM=FB,LRECL=80)
    //SYSIN    DD DUMMY
    //*
    ZZCART1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    //LANCE2  JOB (XXXx,Y),LANCE2,MSGCLASS=K,CLASS=D
    //*  RECOPIE DU JOB A PASSER
    //COPYJCL  EXEC PGM=IDCAMS 
    //SYSPRINT DD SYSOUT=X
    ZZCART3
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    //SOR      DD DISP=SHR,DSN=USER.RE7.INTEGRAT.MOE(ZZLEJOB)
    //SYSPRINT DD SYSOUT=X
    //SYSIN    DD *
       REPRO INFILE(SYSUT1) OUTFILE(SOR)  
    //*   SOUMISSION DU LANCEUR 2
    //SOUMET   EXEC PGM=IEBGENER
    //SYSOUT   DD SYSOUT=X
    //SYSPRINT DD SYSOUT=X
    //SYSUT1   DD DISP=SHR,DSN=USER.RE7.INTEGRAT.MOE(ZZLEJOB)
    //         DD DISP=SHR,DSN=USER.RE7.INTEGRAT.MOE(ZZENCHAI)
    //SYSUT2   DD SYSOUT=(,INTRDR),DCB=(RECFM=FB,LRECL=80)
    //SYSIN    DD DUMMY
    //*
    ZZENCHAI
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    //ENCHAI   EXEC PGM=IEBGENER
    //SYSOUT   DD SYSOUT=X
    //SYSPRINT DD SYSOUT=X
    //SYSUT1   DD DISP=SHR,DSN=USER.RE7.INTEGRAT.MOE(ZZLANCE1)
    //SYSUT2   DD SYSOUT=(,INTRDR),DCB=(RECFM=FB,LRECL=80)
    //SYSIN    DD DUMMY
    //*

Discussions similaires

  1. Récupérer le nom d'un job fils dans un ordonnanceur
    Par taltal dans le forum Développement de jobs
    Réponses: 3
    Dernier message: 13/11/2012, 12h45
  2. Comment écrire explicitement en sortie d'un job OEM ?
    Par zestrellita dans le forum Entreprise Manager
    Réponses: 11
    Dernier message: 11/03/2004, 09h36
  3. Récupérer le nom du fichier spool correspondant à un job
    Par chtiot dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 23/02/2004, 20h28
  4. Infos jobs
    Par Colargole dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 01/12/2003, 11h09
  5. Etre notifié de l'ajout d'un job dans le spooler
    Par chtiot dans le forum API, COM et SDKs
    Réponses: 4
    Dernier message: 12/11/2003, 21h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo