Aller au contenu
Gestion des travaux · 3 / 6

JOBQ et JOBD, attendre et se préparer

La file d'attente de travaux (JOBQ) décide quand un travail batch démarre. La description de travail (JOBD) lui donne ses attributs. Voici comment elles fonctionnent, pourquoi un travail reste bloqué en file, et le piège des valeurs par défaut de SBMJOB, démontré sur un IBM i 7.5.

0-9priorités dans une file, 0 passe en premier
1sous-système au plus pour une file d'attente
1travail à la fois dans la file QBATCH de notre système
*CURRENTliste de bibliothèques et OUTQ par défaut de SBMJOB

En une phrase

Une JOBQ (*JOBQ) est la salle d'attente d'un sous-système : les travaux batch y attendent leur tour. Une JOBD (*JOBD) est un modèle d'attributs : la file où aller, la priorité, la file de sortie, la liste de bibliothèques… que reprennent les travaux qui l'utilisent.

La file d'attente de travaux (JOBQ)

Quand on soumet un travail par SBMJOB, il ne démarre pas tout de suite : il entre dans une file d'attente de travaux. Il en sortira quand le sous-système qui lit cette file aura de la place. C'est ce qui permet de lancer cent traitements d'un coup sans que les cent tournent en même temps.

Pour notre démonstration, la file DEMOJOBQ alimente le sous-système DEMOSBS, qui n'en exécute qu'un travail à la fois (MAXACT(1)). Nous y avons soumis quatre travaux CALCUL1 à CALCUL4, qui attendent chacun une heure (DLYJOB DLY(3600)), le dernier en HOLD(*YES) :

Une file d'attente de travaux et son sous-système SBMJOB dépose les travaux dans la file DEMOJOBQ. CALCUL2 et CALCUL3 attendent, prêts ; CALCUL4 est suspendu. Le sous-système DEMOSBS n'accepte qu'un travail de cette file à la fois : CALCUL1 s'exécute. SBMJOB × 4 JOBQ JOBITRV/DEMOJOBQ rangés par priorité, puis par heure d'arrivée CALCUL2 · priorité 5 · prêt (RLS) CALCUL3 · priorité 5 · prêt (RLS) CALCUL4 · suspendu (HLD) MAXACT(1) : un seul à la fois Sous-système DEMOSBSCALCUL1 s'exécute ; CALCUL2 attend qu'il finisse
L'état réel de la démonstration, relevé ci-dessous par WRKJOBQ et WRKACTJOB.
Écran 5250 Gestion de file d'attente de travaux DEMOJOBQ : état RLS/SBS, CALCUL2 et CALCUL3 en RLS, CALCUL4 en HLD, priorité 5
WRKJOBQ JOBITRV/DEMOJOBQ : la file est libérée et rattachée à un sous-système actif (RLS/SBS). CALCUL1 n'y est plus : il s'exécute dans DEMOSBS.

Dans quel ordre les travaux sortent

  1. La disponibilité : les travaux prêts passent avant les travaux planifiés à une date ou une heure, puis viennent les travaux suspendus, qui ne sortent pas tant qu'on ne les libère pas.
  2. La priorité, de 0 à 9 : 0 passe en premier. SBMJOB accepte 1 à 9 et prend par défaut celle de la JOBD (5 dans QDFTJOBD).
  3. L'heure d'arrivée : à priorité égale, le premier arrivé sort le premier. Le numéro du travail ne compte pas.

Le sous-système, lui, prend des travaux dans la file tant qu'il n'a pas atteint le nombre maximal de travaux actifs fixé pour cette file (MAXACT du poste file d'attente), et, s'il est fixé, le maximum par priorité. Quand il lit plusieurs files, il les traite dans l'ordre de leur numéro de séquence. Une file ne peut alimenter qu'un seul sous-système actif à la fois, mais un sous-système peut lire plusieurs files.

Écran 5250 Postes files d'attente de travaux de QBATCH : QBATCH de QGPL activité maximale 1, QS36EVOKE et QTXTSRCH *NOMAX
Les files de QBATCH sur notre IBM i 7.5 : QGPL/QBATCH n'envoie qu'un travail à la fois. Les colonnes 1 à 9 donnent le maximum par priorité (* : pas de limite).

Conséquence pratique : sur ce système, deux traitements soumis en même temps dans QBATCH s'exécutent l'un après l'autre. C'est voulu pour des traitements qui doivent se suivre, gênant pour des traitements indépendants. On peut alors augmenter la limite (CHGJOBQE) ou soumettre dans une autre file.

Pourquoi mon travail reste en file d'attente

Un travail qui ne démarre pas est presque toujours dans l'un de ces cas. Commencez par WRKSBMJOB ou WRKJOBQ :

CauseComment la voirQue faire
La file n'est rattachée à aucun sous-système actifWRKJOBQ n'affiche pas « SBS » dans l'état de la file.Démarrer le sous-système (STRSBS) ou ajouter un poste file d'attente (ADDJOBQE).
La file est suspendueÉtat HLD de la file dans WRKJOBQ.RLSJOBQ.
Le travail est suspenduÉtat HLD du travail : soumis avec HOLD(*YES) ou suspendu par HLDJOB.RLSJOB, ou option 6 de WRKJOBQ.
Le maximum de travaux actifs est atteintAutant de travaux de cette file tournent déjà que le permet MAXACT.Attendre, augmenter MAXACT (CHGJOBQE) ou déplacer le travail dans une autre file (CHGJOB JOBQ).
Le travail est planifiéSoumis avec une date ou une heure (SCDDATE, SCDTIME).Il démarrera à l'heure dite.

La description de travail (JOBD)

Une description de travail rassemble des attributs que plusieurs travaux partagent. Plutôt que de tout préciser à chaque SBMJOB, on écrit JOBD(JOBITRV/DEMOJOBD) et le travail reprend ce qu'elle contient. Changer la JOBD change tous les travaux qui l'utilisent, et eux seuls. Voici la nôtre, créée par CRTJOBD et affichée par DSPJOBD :

CRTJOBD    JOBD(JOBITRV/DEMOJOBD) JOBQ(JOBITRV/DEMOJOBQ) JOBPTY(5) +
             OUTPTY(5) OUTQ(JOBITRV/DEMOOUTQ) +
             INLLIBL(JOBITRV QGPL QTEMP) LOG(4 00 *SECLVL) +
             TEXT('Description de travail de démonstration')
Écran 5250 Description de travail DEMOJOBD, première page : profil utilisateur *RQD, priorité 5, file d'attente DEMOJOBQ, file d'attente en sortie DEMOOUTQ
DSPJOBD, page 1 : utilisateur, files d'attente, priorités.
Écran 5250 Description de travail DEMOJOBD, deuxième page : consignation des messages niveau 4 gravité 0 *SECLVL, données de routage QCMDI
Page 2 : journalisation et données de routage QCMDI.
Écran 5250 Description de travail DEMOJOBD : liste initiale des bibliothèques JOBITRV, QGPL, QTEMP
Dernière page : la liste initiale des bibliothèques.
AttributDans DEMOJOBDÀ quoi il sert
Profil utilisateur (USER)*RQDL'utilisateur du travail. *RQD : la JOBD n'en fournit pas, il vient de l'ouverture de session ou de SBMJOB.
File d'attente de travaux (JOBQ)JOBITRV/DEMOJOBQOù vont les travaux soumis avec cette JOBD.
Priorité en file (JOBPTY)5Leur rang dans la file : 1 passe avant 9.
File d'attente en sortie (OUTQ)JOBITRV/DEMOOUTQOù vont leurs spools.
Consignation des messages (LOG)4 00 *SECLVLLe niveau de détail de l'historique (0 à 4), la gravité minimale, et le texte : avec *NOLIST (la valeur de QDFTJOBD), l'historique n'est imprimé qu'en cas de fin anormale.
Données de routage (RTGDTA)QCMDILa valeur comparée aux postes de routage du sous-système. QCMDI est la valeur par défaut de CRTJOBD.
Données de la demande (RQSDTA)*NONELa commande à exécuter, pour un travail autostart par exemple.
Liste initiale des bibliothèques (INLLIBL)JOBITRV QGPL QTEMPLa partie utilisateur de la liste de bibliothèques.
Réponse aux messages (INQMSGRPY)*RQDAttendre une réponse aux questions, ou répondre seul avec la valeur par défaut.

Qui utilise une JOBD ?

  • Les sessions interactives : la JOBD du poste écran du sous-système, ou, s'il indique *USRPRF, celle du profil utilisateur. Nos profils utilisent QGPL/QDFTJOBD, la JOBD par défaut d'IBM. Pour en donner une à un profil, voyez attacher une JOBD à un profil.
  • Les travaux batch : celle du paramètre JOBD de SBMJOB, par défaut celle du profil.
  • Les travaux autostart et prédémarrés : celle de leur poste dans la description de sous-système. Un travail autostart tourne sous l'utilisateur de sa JOBD, qui ne peut donc pas être *RQD : protégez qui peut la modifier.

Le piège : SBMJOB ne prend pas tout dans la JOBD

On croit souvent qu'un travail soumis avec une JOBD en reprend tous les attributs. C'est faux : chaque paramètre de SBMJOB a sa propre valeur par défaut, et plusieurs vont chercher la valeur ailleurs que dans la JOBD. Voici ce que dit l'invite de SBMJOB (F4 puis F10) sur notre IBM i 7.5 :

ParamètrePar défautLe travail prend…
JOBD*USRPRFla description de travail du profil utilisateur
JOBQ*JOBDla file d'attente de la JOBD
JOBPTY*JOBDla priorité en file d'attente de la JOBD
OUTQ*CURRENTla file de sortie du travail qui soumet, pas celle de la JOBD
USER*CURRENTl'utilisateur qui soumet
RTGDTAQCMDBla valeur QCMDB, pas les données de routage de la JOBD
INLLIBL*CURRENTla liste de bibliothèques du travail qui soumet, pas celle de la JOBD
LOG*JOBDle niveau de journalisation de la JOBD
HOLD*JOBDsuspendre ou non en file, selon la JOBD
Écran 5250 Soumettre un travail (SBMJOB) : description de travail *USRPRF, file d'attente de travaux *JOBD, priorités *JOBD, unité imprimante *CURRENT
L'invite de SBMJOB : JOBQ(*JOBD), mais…
Écran 5250 SBMJOB, autres paramètres : file d'attente en sortie *CURRENT, utilisateur *CURRENT, donnée de routage QCMDB
… OUTQ(*CURRENT), USER(*CURRENT) et RTGDTA(QCMDB).
Écran 5250 SBMJOB, suite des autres paramètres : liste bibliothèques système *CURRENT, bibliothèque en cours *CURRENT, liste bibliothèques initiale *CURRENT, consignation des messages *JOBD
Et INLLIBL(*CURRENT) : la liste de bibliothèques vient du travail qui soumet.

La preuve. Notre travail EDITION a été soumis avec la JOBD DEMOJOBD, dont la liste de bibliothèques est JOBITRV QGPL QTEMP, et avec OUTQ(*JOBD) écrit explicitement. Son historique dit ce qu'il a réellement reçu :

CPF1124  Travail 011954/SAKADM/EDITION démarré le 14/10/26 à
         15:53:59 dans le sous-système DEMOSBS de JOBITRV ; soumis le 14/10/26 à
         15:53:59.
CPI1125  Travail 011954/SAKADM/EDITION soumis.
         Le travail 011954/SAKADM/EDITION a été soumis en file
         d'attente de travaux DEMOJOBQ de JOBITRV à partir du travail
         011953/SAKADM/QPADEV0001. Le travail 011954/SAKADM/EDITION a été démarré par
         la commande SBMJOB (Soumettre un travail) avec les attributs : JOBPTY(5)
         OUTPTY(5) PRTTXT() RTGDTA(QCMDB) SYSLIBL(QSYS       QSYS2      QHLPSYS
         QUSRSYS) CURLIB(*CRTDFT) INLLIBL(QGPL       QTEMP) INLASPGRP(*NONE) LOG(4 00
         *SECLVL) LOGCLPGM(*NO) LOGOUTPUT(*JOBEND) OUTQ(JOBITRV/DEMOOUTQ)
         PRTDEV(PRT01) INQMSGRPY(*RQD) HOLD(*NO) DATE(*SYSVAL) […]
*NONE    -DSPLIB LIB(JOBITRV) OUTPUT(*PRINT)
CPF1164  Travail 011954/SAKADM/EDITION arrêté le 14/10/26 à
         15:53:59; temps UC 0,007; code fin 0 .
  • OUTQ(JOBITRV/DEMOOUTQ) : la file de la JOBD, parce que nous avons écrit OUTQ(*JOBD).
  • INLLIBL(QGPL QTEMP) : la liste de la session qui a soumis. JOBITRV n'y est pas, alors que la JOBD la contient.
  • RTGDTA(QCMDB) : la valeur par défaut de SBMJOB, et non le QCMDI de la JOBD.
  • LOG(4 00 *SECLVL) et JOBPTY(5) : bien ceux de la JOBD.
Pour que la JOBD décide, écrivez-le : SBMJOB … JOBD(MABIB/MAJOBD) INLLIBL(*JOBD) OUTQ(*JOBD). Sinon, un traitement qui marche quand vous le soumettez depuis votre session peut échouer en CPF4101 (fichier non trouvé dans la liste de bibliothèques) quand il est soumis depuis une autre session, avec une autre liste de bibliothèques.

Les commandes des files et des descriptions

WRKJOBQUne file d'attente et ses travaux, ou la liste de toutes les files.
CRTJOBQCréer une file d'attente de travaux.
ADDJOBQELa rattacher à un sous-système.
CHGJOBQEChanger son nombre de travaux actifs (MAXACT).
RMVJOBQELa détacher d'un sous-système.
HLDJOBQSuspendre une file : plus aucun travail n'en sort.
RLSJOBQLibérer une file suspendue.
CLRJOBQVider une file de tous ses travaux en attente.
CHGJOBChanger la file ou la priorité d'un travail en attente.
ADDJOBSCDEPlanifier un travail qui revient (chaque nuit, chaque lundi…).
CRTJOBDCréer une description de travail.
CHGJOBDLa modifier.
DSPJOBDL'afficher.
WRKJOBDLister les descriptions de travail.

Et en SQL :

QSYS2.JOB_QUEUE_INFOLes files d'attente : sous-système, MAXACT, travaux en attente.
QSYS2.JOB_DESCRIPTION_INFOLes descriptions de travail et tous leurs attributs.
QSYS2.SCHEDULED_JOB_INFOLes travaux planifiés.
Toutes les commandes de la démonstration
/* La bibliothèque de démonstration                                  */
CRTLIB     LIB(JOBITRV) TEXT('Démonstration gestion des travaux')

/* Une file d'attente de travaux et une file d'attente de sortie     */
CRTJOBQ    JOBQ(JOBITRV/DEMOJOBQ) +
             TEXT('File d''attente des travaux de démonstration')
CRTOUTQ    OUTQ(JOBITRV/DEMOOUTQ) +
             TEXT('File d''attente de sortie de démonstration')

/* La description de travail qui relie les deux                      */
CRTJOBD    JOBD(JOBITRV/DEMOJOBD) JOBQ(JOBITRV/DEMOJOBQ) JOBPTY(5) +
             OUTPTY(5) OUTQ(JOBITRV/DEMOOUTQ) +
             INLLIBL(JOBITRV QGPL QTEMP) LOG(4 00 *SECLVL) +
             TEXT('Description de travail de démonstration')

/* Le sous-système : un pool, une file, un poste de routage          */
CRTSBSD    SBSD(JOBITRV/DEMOSBS) POOLS((1 *BASE)) +
             TEXT('Sous-système de démonstration')
ADDJOBQE   SBSD(JOBITRV/DEMOSBS) JOBQ(JOBITRV/DEMOJOBQ) MAXACT(1) +
             SEQNBR(10)
ADDRTGE    SBSD(JOBITRV/DEMOSBS) SEQNBR(9999) CMPVAL(*ANY) +
             PGM(QSYS/QCMD) CLS(QGPL/QBATCH)
STRSBS     SBSD(JOBITRV/DEMOSBS)

/* Cinq travaux soumis depuis une session 5250                       */
SBMJOB     CMD(DSPLIB LIB(JOBITRV) OUTPUT(*PRINT)) JOB(EDITION) +
             JOBD(JOBITRV/DEMOJOBD) OUTQ(*JOBD)
SBMJOB     CMD(DLYJOB DLY(3600)) JOB(CALCUL1) JOBD(JOBITRV/DEMOJOBD)
SBMJOB     CMD(DLYJOB DLY(3600)) JOB(CALCUL2) JOBD(JOBITRV/DEMOJOBD)
SBMJOB     CMD(DLYJOB DLY(3600)) JOB(CALCUL3) JOBD(JOBITRV/DEMOJOBD)
SBMJOB     CMD(DLYJOB DLY(3600)) JOB(CALCUL4) JOBD(JOBITRV/DEMOJOBD) +
             HOLD(*YES)

À retenir

  • La JOBQ fait attendre les travaux batch ; le sous-système qui la lit les en sort, dans la limite de MAXACT.
  • Ordre de sortie : prêts avant suspendus, priorité de 0 à 9, puis heure d'arrivée.
  • La JOBD est un modèle d'attributs partagé par les travaux qui l'utilisent.
  • SBMJOB prend la liste de bibliothèques et la file de sortie du travail qui soumet : écrivez INLLIBL(*JOBD) OUTQ(*JOBD) pour suivre la JOBD.

Sources

Les exemples ont été créés et relevés sur un IBM i 7.5 (voir la méthode). Les définitions et les règles viennent de ces sources, consultées le 14 octobre 2026 :

  1. IBM i 7.3 Systems management : Work management, IBM (PDF, 212 pages). La vie d'un travail batch (SBMJOB, JOBQ, sous-système, pool mémoire, OUTQ) ; nom qualifié d'un travail à 6 chiffres ; types de travaux ; démarrage d'un travail interactif et d'un travail batch ; routage, classe et priorité d'exécution (0 à 99) ; pools *MACHINE, *BASE, *INTERACT, *SPOOL ; ordre d'une JOBQ (priorité 0 à 9, MAXACT, une file par sous-système) ; QSTRUPPGM ; OUTQ, spools, éditeurs et repli sur QGPL/QPRINT ; planning des travaux (objet QDFTJOBSCD, QJOBSCD, exemples d'ADDJOBSCDE, SBMJOB à heure fixe, reprise après arrêt).
  2. L'aide en ligne des commandes citées, livrée avec IBM i 7.5 et reprise en français dans les fiches des commandes CL de ce site. Valeurs par défaut de SBMJOB, CRTJOBD, CRTPF (WAITRCD), CPYSPLF et DLTSPLF.

Questions fréquentes

Qu'est-ce qu'une JOBQ ?

Une file d'attente de travaux (*JOBQ) est la salle d'attente des travaux batch. SBMJOB y dépose le travail, et le sous-système auquel elle est rattachée l'en sort pour l'exécuter, par priorité (0 à 9) puis par ordre d'arrivée, dans la limite de MAXACT.

Pourquoi mon travail reste-t-il en file d'attente ?

Le plus souvent : la file n'est rattachée à aucun sous-système actif, la file ou le travail est suspendu (HLD), ou le nombre maximal de travaux actifs (MAXACT) est atteint : sur notre IBM i 7.5, la file QBATCH n'envoie qu'un travail à la fois dans le sous-système QBATCH.

Qu'est-ce qu'une JOBD ?

Une description de travail (*JOBD) est un modèle d'attributs : file d'attente de travaux, priorité, file de sortie, liste de bibliothèques, données de routage, niveau de journalisation, et parfois l'utilisateur. Un travail qui l'utilise reprend ces valeurs.

Pourquoi ma JOBD n'a-t-elle pas donné sa liste de bibliothèques ?

Parce que SBMJOB a ses propres valeurs par défaut : INLLIBL(*CURRENT) recopie la liste du travail qui soumet, OUTQ(*CURRENT) sa file de sortie. Pour prendre celles de la JOBD, il faut écrire INLLIBL(*JOBD) et OUTQ(*JOBD).