Aller au contenu
Gestion des travaux · 4 / 6

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.

1-9priorité d'un spool, 1 sort en premier
QPRINTla file de secours, dans QGPL
2spools laissés par notre travail EDITION
1 822octets pour le PDF d'un spool d'une page

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.

Le chemin d'une impression Le programme écrit dans un fichier imprimante ; le système crée un fichier spoule et le range dans une file d'attente de sortie ; un éditeur, qui tourne dans le sous-système QSPL, prend les spools prêts et les envoie à l'imprimante. On peut aussi les afficher, les copier en PDF ou les supprimer. ProgrammeDSPLIB OUTPUT(*PRINT), un état RPG… il écrit dans Fichier imprimante (PRTF)QPDSPLIB, QSYSPRT… avec SPOOL(*YES) le système crée un fichier spoule OUTQ : file d'attente de sortieles spools attendent, état RDY un éditeur prend les spools prêts Éditeur (writer)un travail du sous-système QSPL Imprimante ou : afficher (DSPSPLF), copier en PDF (CPYSPLF), supprimer (DLTSPLF)
Les éléments de la mise en spoule selon IBM : programme, fichier imprimante, fichier spoule, file d'attente de sortie, éditeur et imprimante.

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 :

Écran 5250 Gestion de file d'attente en sortie DEMOOUTQ : spools QPDSPLIB et QPJOBLOG de SAKADM, état RDY, 1 page
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 :

Écran 5250 Fichier spoule QPDSPLIB : liste de la bibliothèque JOBITRV avec DEMOJOBQ, DEMOOUTQ, DEMOJOBD et DEMOSBS
Le spool QPDSPLIB : la bibliothèque JOBITRV et ses quatre objets, tels que DSPLIB les a imprimés.

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'
SpoolTravailÉtatPagesCréé leN°
QPDSPLIB011954/SAKADM/EDITIONREADY12026-10-14 15:53:591
QPJOBLOG011954/SAKADM/EDITIONREADY12026-10-14 15:53:592

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_BASICLes spools d'une file, rapidement.
QSYS2.OUTPUT_QUEUE_INFOLes files de sortie et leurs attributs.
QSYS2.SPOOLED_FILE_INFOLes spools d'un utilisateur ou d'un travail.
SYSTOOLS.SPOOLED_FILE_DATALe contenu d'un spool, ligne par ligne.
SYSTOOLS.DELETE_OLD_SPOOLED_FILESSupprimer 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)
Attention à 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

WRKOUTQUne file de sortie et ses spools, ou la liste des files.
WRKSPLFVos spools, toutes files confondues.
DSPSPLFAfficher le contenu d'un spool.
CHGSPLFAChanger un spool : file de sortie, priorité, nombre d'exemplaires…
HLDSPLFSuspendre un spool : l'éditeur le saute.
RLSSPLFLibérer un spool suspendu.
CPYSPLFCopier un spool dans un fichier, ou en PDF dans l'IFS.
DLTSPLFSupprimer un spool.
CRTOUTQCréer une file de sortie.
CLROUTQVider une file de sortie.
STRPRTWTRDémarrer un éditeur vers une imprimante.
STRRMTWTRDémarrer un éditeur vers un autre système.
WRKWTRLes éditeurs et leur état.
ENDWTRArrê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 *SELECT sans 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 :

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