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.
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) :

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
- 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.
- 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).
- 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.

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 :
| Cause | Comment la voir | Que faire |
|---|---|---|
| La file n'est rattachée à aucun sous-système actif | WRKJOBQ 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 atteint | Autant 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')

DSPJOBD, page 1 : utilisateur, files d'attente, priorités.
QCMDI.
| Attribut | Dans DEMOJOBD | À quoi il sert |
|---|---|---|
| Profil utilisateur (USER) | *RQD | L'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/DEMOJOBQ | Où vont les travaux soumis avec cette JOBD. |
| Priorité en file (JOBPTY) | 5 | Leur rang dans la file : 1 passe avant 9. |
| File d'attente en sortie (OUTQ) | JOBITRV/DEMOOUTQ | Où vont leurs spools. |
| Consignation des messages (LOG) | 4 00 *SECLVL | Le 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) | QCMDI | La 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) | *NONE | La commande à exécuter, pour un travail autostart par exemple. |
| Liste initiale des bibliothèques (INLLIBL) | JOBITRV QGPL QTEMP | La partie utilisateur de la liste de bibliothèques. |
| Réponse aux messages (INQMSGRPY) | *RQD | Attendre 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 utilisentQGPL/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ètre | Par défaut | Le travail prend… |
|---|---|---|
JOBD | *USRPRF | la description de travail du profil utilisateur |
JOBQ | *JOBD | la file d'attente de la JOBD |
JOBPTY | *JOBD | la priorité en file d'attente de la JOBD |
OUTQ | *CURRENT | la file de sortie du travail qui soumet, pas celle de la JOBD |
USER | *CURRENT | l'utilisateur qui soumet |
RTGDTA | QCMDB | la valeur QCMDB, pas les données de routage de la JOBD |
INLLIBL | *CURRENT | la liste de bibliothèques du travail qui soumet, pas celle de la JOBD |
LOG | *JOBD | le niveau de journalisation de la JOBD |
HOLD | *JOBD | suspendre ou non en file, selon la JOBD |

JOBQ(*JOBD), mais…
OUTQ(*CURRENT), USER(*CURRENT) et RTGDTA(QCMDB).
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 écritOUTQ(*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 leQCMDIde la JOBD.LOG(4 00 *SECLVL)etJOBPTY(5): bien ceux de la JOBD.
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
| WRKJOBQ | Une file d'attente et ses travaux, ou la liste de toutes les files. |
|---|---|
| CRTJOBQ | Créer une file d'attente de travaux. |
| ADDJOBQE | La rattacher à un sous-système. |
| CHGJOBQE | Changer son nombre de travaux actifs (MAXACT). |
| RMVJOBQE | La détacher d'un sous-système. |
| HLDJOBQ | Suspendre une file : plus aucun travail n'en sort. |
| RLSJOBQ | Libérer une file suspendue. |
| CLRJOBQ | Vider une file de tous ses travaux en attente. |
| CHGJOB | Changer la file ou la priorité d'un travail en attente. |
| ADDJOBSCDE | Planifier un travail qui revient (chaque nuit, chaque lundi…). |
| CRTJOBD | Créer une description de travail. |
| CHGJOBD | La modifier. |
| DSPJOBD | L'afficher. |
| WRKJOBD | Lister les descriptions de travail. |
Et en SQL :
| QSYS2.JOB_QUEUE_INFO | Les files d'attente : sous-système, MAXACT, travaux en attente. |
|---|---|
| QSYS2.JOB_DESCRIPTION_INFO | Les descriptions de travail et tous leurs attributs. |
| QSYS2.SCHEDULED_JOB_INFO | Les 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 :
- 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).
- 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).