L'OUTQ et les spools, où vont les impressions
Sur IBM i, un programme n'imprime pas directement : il produit un spool, rangé dans une file d'attente de sortie (OUTQ), qu'un éditeur envoie ensuite à l'imprimante. Voici d'où viennent les spools, où ils vont, comment les gérer, les lister en SQL et les convertir en PDF.
En une phrase
Un spool (fichier spoule) est une impression gardée sur
disque. Il attend dans une OUTQ (*OUTQ), la file d'attente de sortie,
qu'un éditeur (writer) l'envoie à une imprimante, à moins qu'on le lise
à l'écran, qu'on le convertisse en PDF ou qu'on le supprime.
C'est quoi, un spool ?
Quand un programme imprime, il écrit dans un fichier imprimante (un
*FILE d'attribut PRTF, comme QSYSPRT ou QPDSPLIB). Si ce
fichier demande la mise en spoule (SPOOL(*YES)), les lignes ne partent pas vers
l'imprimante : le système les range sur disque dans un fichier spoule, placé
dans une file d'attente de sortie. Le programme continue sans attendre l'imprimante, et une même
imprimante sert plusieurs travaux à son rythme.
Un spool devient imprimable selon l'attribut SCHEDULE du fichier imprimante : dès qu'il
est fermé (*FILEEND, la valeur par défaut), à la fin du travail (*JOBEND)
ou tout de suite, avant même sa fermeture (*IMMED). Un spool survit au travail qui
l'a créé : notre travail EDITION est terminé depuis longtemps, ses deux spools sont toujours là.
Dans quelle OUTQ part un spool ?
Le système regarde d'abord le fichier imprimante. Son attribut OUTQ vaut le plus
souvent *JOB : c'est alors la file de sortie du travail qui décide.
Celle-ci a été fixée à la création du travail, à partir du profil utilisateur, de la
description de travail, de l'écran ou de la valeur système
QPRTDEV (l'imprimante par défaut). Pour un travail batch, c'est aussi le paramètre
OUTQ de SBMJOB : notre travail EDITION a reçu JOBITRV/DEMOOUTQ parce que nous avons
écrit OUTQ(*JOBD).
Si la file désignée n'existe pas, le spool part dans QGPL/QPRINT.
Nous l'avons vu arriver : notre partition n'a pas d'imprimante, et la session de démonstration,
qui devait imprimer sur l'imprimante par défaut PRT01, a reçu à sa fermeture ce
message dans son historique :
CPD4090 Imprimante PRT01 non trouvée. File de sortie remplacée par
QPRINT de QGPL.
Quand une impression « disparaît », c'est le premier endroit où regarder :
WRKOUTQ QGPL/QPRINT, ou WRKSPLF, qui liste vos spools quelle que soit
leur file.
Gérer une file de sortie : WRKOUTQ
WRKOUTQ montre les spools d'une file, avec le travail qui les a créés, leur état, leur nombre de pages et leur priorité. Voici notre file de démonstration après le travail EDITION :

WRKOUTQ JOBITRV/DEMOOUTQ : la liste de la bibliothèque (QPDSPLIB) et l'historique du travail (QPJOBLOG), prêts (RDY). Aucun éditeur n'est rattaché : ils attendent.L'option 5 affiche le contenu, sans rien imprimer :

Les autres options suspendent un spool (3, l'éditeur le saute), le libèrent (6), le suppriment
(4) ou en changent les attributs (2) : priorité, nombre d'exemplaires, ou file de sortie pour
l'envoyer sur une autre imprimante. L'ordre de sortie dépend de la priorité du
spool, de 1 à 9 (1 sort en premier), puis de l'attribut SEQ de la file :
*FIFO, premier arrivé premier sorti, ou *JOBNBR, dans l'ordre d'arrivée
des travaux dans le système.
Qui peut voir les spools des autres ?
La file de sortie porte ses propres règles. Selon IBM, une file est créée par défaut avec le droit
public *USE, DSPDTA(*NO) (on ne lit pas le contenu des spools des
autres), AUTCHK(*OWNER) (le propriétaire de la file gère les spools) et
OPRCTL(*YES) (un utilisateur ayant le droit spécial *JOBCTL peut
suspendre, libérer et supprimer les spools). Pour une file qui reçoit des bulletins de paie, ces
réglages comptent.
Les éditeurs : de l'OUTQ à l'imprimante
Un éditeur (writer) est un travail, de type WTR, qui tourne
dans le sous-système QSPL. Il lit une file de sortie et
envoie à l'imprimante chaque spool prêt (RDY), en sautant les autres. On le démarre
par STRPRTWTR pour une imprimante, ou par STRRMTWTR pour
envoyer les spools vers un autre système ; son paramètre AUTOEND dit s'il attend les
spools suivants ou s'arrête quand la file est vide. WRKWTR montre les
éditeurs actifs, ENDWTR en arrête un.
Sans éditeur, rien ne s'imprime et les spools restent en file : c'est le cas sur notre partition
de démonstration, qui n'a aucune imprimante. C'est aussi pourquoi notre relevé des travaux actifs
ne comptait aucun travail WTR.
Les spools en SQL
Les services SQL d'IBM i lisent les files de sortie sans écran 5250. Sur notre file de démonstration :
SELECT SPOOLED_FILE_NAME, JOB_NAME, STATUS, TOTAL_PAGES,
CREATE_TIMESTAMP, FILE_NUMBER
FROM QSYS2.OUTPUT_QUEUE_ENTRIES_BASIC
WHERE OUTPUT_QUEUE_LIBRARY_NAME = 'JOBITRV'
AND OUTPUT_QUEUE_NAME = 'DEMOOUTQ'
| Spool | Travail | État | Pages | Créé le | N° |
|---|---|---|---|---|---|
QPDSPLIB | 011954/SAKADM/EDITION | READY | 1 | 2026-10-14 15:53:59 | 1 |
QPJOBLOG | 011954/SAKADM/EDITION | READY | 1 | 2026-10-14 15:53:59 | 2 |
Le numéro de spool compte : un travail peut produire plusieurs spools du même nom. Pour lire le contenu, SYSTOOLS.SPOOLED_FILE_DATA demande le travail, le nom et ce numéro. L'historique de notre travail EDITION est le spool n° 2 : demandé avec le n° 1, la fonction ne renvoie rien.
| QSYS2.OUTPUT_QUEUE_ENTRIES_BASIC | Les spools d'une file, rapidement. |
|---|---|
| QSYS2.OUTPUT_QUEUE_INFO | Les files de sortie et leurs attributs. |
| QSYS2.SPOOLED_FILE_INFO | Les spools d'un utilisateur ou d'un travail. |
| SYSTOOLS.SPOOLED_FILE_DATA | Le contenu d'un spool, ligne par ligne. |
| SYSTOOLS.DELETE_OLD_SPOOLED_FILES | Supprimer les spools plus anciens qu'une date (aperçu avec PREVIEW => 'YES'). |
Convertir un spool en PDF
CPYSPLF copie un spool dans un fichier de l'IFS, et le paramètre
WSCST(*PDF) le convertit en PDF au passage. Sur notre IBM i 7.5 :
CPYSPLF FILE(QPDSPLIB) TOFILE(*TOSTMF) JOB(011954/SAKADM/EDITION)
SPLNBR(1) TOSTMF('/tmp/jobitrv-edition.pdf') WSCST(*PDF)
STMFOPT(*REPLACE)
Le système a répondu Fichier spoule copié dans /tmp/jobitrv-edition.pdf. (CPC3311) :
un PDF d'une page et de 1 822 octets, qui reprend la liste de la bibliothèque. Au passage, la
commande a soumis un travail QCTXMGR dans la file d'attente QUSRNOMAX :
même une conversion passe par une JOBQ. Selon l'aide de la
commande, le spool doit avoir l'attribut DEVTYPE *SCS ou
*AFPDS.
Supprimer des spools sans casse
Les spools s'accumulent : chaque historique de travail, chaque liste de compilation en est un. Pour supprimer un spool précis, donnez le travail, le nom et le numéro :
DLTSPLF FILE(QPDSPLIB) JOB(011954/SAKADM/EDITION) SPLNBR(1)
DLTSPLF FILE(*SELECT). Avec cette valeur, la commande
supprime tous les spools qui répondent au paramètre SELECT, dont la valeur par défaut
retient tous les spools de l'utilisateur qui lance la commande, sur toutes les files. Une
commande lancée pour « faire le ménage » efface ainsi des centaines de spools, sans retour en
arrière possible.
Pour un ménage régulier et ciblé, préférez une file dédiée que l'on vide par
CLROUTQ, ou la procédure
SYSTOOLS.DELETE_OLD_SPOOLED_FILES, qui supprime les spools plus anciens
qu'une date (trois mois par défaut). Attention, elle aussi vise par défaut toutes les files et
tous les utilisateurs, et supprime pour de bon : précisez la file ou l'utilisateur, et lancez-la
d'abord avec PREVIEW => 'YES' pour voir ce qu'elle supprimerait.
Les commandes des files de sortie et des spools
| WRKOUTQ | Une file de sortie et ses spools, ou la liste des files. |
|---|---|
| WRKSPLF | Vos spools, toutes files confondues. |
| DSPSPLF | Afficher le contenu d'un spool. |
| CHGSPLFA | Changer un spool : file de sortie, priorité, nombre d'exemplaires… |
| HLDSPLF | Suspendre un spool : l'éditeur le saute. |
| RLSSPLF | Libérer un spool suspendu. |
| CPYSPLF | Copier un spool dans un fichier, ou en PDF dans l'IFS. |
| DLTSPLF | Supprimer un spool. |
| CRTOUTQ | Créer une file de sortie. |
| CLROUTQ | Vider une file de sortie. |
| STRPRTWTR | Démarrer un éditeur vers une imprimante. |
| STRRMTWTR | Démarrer un éditeur vers un autre système. |
| WRKWTR | Les éditeurs et leur état. |
| ENDWTR | Arrêter un éditeur. |
À retenir
- Un programme imprime dans un spool, rangé dans une OUTQ ; un éditeur de QSPL l'imprime.
- La file vient du fichier imprimante, sinon du travail ; à défaut, ce sera QGPL/QPRINT.
- Un spool survit à son travail : on l'affiche, on le déplace, on le convertit en PDF.
- Supprimez un spool par son travail, son nom et son numéro, jamais par
*SELECTsans filtre.
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 OUTQ ?
Une file d'attente de sortie (*OUTQ) est la liste ordonnée des spools en attente d'impression ou de traitement. Un éditeur (writer) y prend les spools prêts pour les envoyer à une imprimante.
Qu'est-ce qu'un spool ?
Un fichier spoule (spool) est une sortie imprimée gardée sur disque au lieu d'aller directement à l'imprimante. Le programme écrit dans un fichier imprimante, le système range le résultat dans une OUTQ, et le programme continue sans attendre l'imprimante.
Où part un spool si son OUTQ n'existe pas ?
Dans QGPL/QPRINT. Sur notre système, l'historique d'un travail dont l'imprimante PRT01 n'existe pas a reçu le message CPD4090 « Imprimante PRT01 non trouvée. File de sortie remplacée par QPRINT de QGPL ».
Comment convertir un spool en PDF ?
Avec CPYSPLF vers un fichier de l'IFS : CPYSPLF FILE(QPDSPLIB) TOFILE(*TOSTMF) JOB(011954/SAKADM/EDITION) SPLNBR(1) TOSTMF('/tmp/edition.pdf') WSCST(*PDF). Le spool doit avoir l'attribut DEVTYPE *SCS ou *AFPDS.