Aller au contenu
Gestion des travaux · 5 / 6

Planifier les travaux, WRKJOBSCDE et ADDJOBSCDE

Les traitements de nuit, les éditions de fin de mois, les purges du lundi : IBM i les lance tout seul grâce à son planning des travaux. Voici à quoi il sert, comment ajouter une entrée, la gérer, ce qui se passe si le système est arrêté, et quand préférer un simple SBMJOB à heure fixe.

4fréquences : une fois, semaine, mois, année
20dates à sauter au plus par entrée (OMITDATE)
1soumission rattrapée au plus après un arrêt
0 sd'écart, à la seconde près, entre l'heure prévue et le travail

En une phrase

Le planning des travaux (job schedule) est la liste des traitements qu'IBM i doit lancer seul : chaque entrée, ajoutée par ADDJOBSCDE, dit quelle commande exécuter, quand, à quelle fréquence et sous quel profil ; à l'heure dite, le système soumet le travail dans une file d'attente, comme un SBMJOB.

À quoi sert le planning des travaux ?

À ne plus soumettre à la main ce qui revient : la paie, les éditions de la semaine ou du mois, les purges, les sauvegardes, les échanges de fichiers de la nuit. On décrit le traitement une fois, et le système le lance aux dates prévues, de jour comme de nuit, sans personne devant l'écran.

Toutes les entrées sont rangées dans un seul objet, QDFTJOBSCD, de type *JOBSCD, dans la bibliothèque QUSRSYS. On ne peut ni le créer, ni le supprimer, ni le déplacer. Comme c'est un objet permanent, les entrées survivent à un vidage de file d'attente et se sauvegardent avec QUSRSYS. Il est livré avec un droit public *CHANGE, le minimum pour ajouter et gérer des entrées (c'est bien le cas sur notre système).

Le moteur est un travail système, QJOBSCD : il surveille les heures des entrées et soumet les travaux. Sur notre IBM i 7.5, il est actif hors de tout sous-système (type SYS), en état EVTW : il attend le prochain événement.

Du planning à l'exécution ADDJOBSCDE ajoute une entrée dans l'objet QUSRSYS/QDFTJOBSCD. Le travail système QJOBSCD surveille les heures ; à l'heure prévue, il soumet le travail dans la file d'attente de travaux, avec les attributs de la description de travail. Le sous-système le prend et l'exécute. ADDJOBSCDEcommande, fréquence, jours, heure, JOBD… une entrée est ajoutée Planning QUSRSYS/QDFTJOBSCDobjet *JOBSCD, permanent QJOBSCD surveille les heures QJOBSCD soumet le travailà l'heure prévue, comme un SBMJOB File d'attente de travaux (JOBQ) Sous-système : le travail s'exécute
D'après IBM, Work management, « Job schedule entries » ; le soumissionnaire QJOBSCD est relevé dans l'historique de notre travail planifié.

Ajouter une entrée : ADDJOBSCDE

Trois paramètres sont obligatoires : le nom du travail, la commande et la fréquence. Les autres ont une valeur par défaut :

Écran 5250 Ajouter poste planning travaux (ADDJOBSCDE) : travail, commande à exécuter, fréquence, date planifiée *CURRENT, jour planifié *NONE, heure planifiée *CURRENT
L'invite de ADDJOBSCDE : date et heure valent *CURRENT par défaut.
ParamètrePar défautRôle
JOB—Le nom du travail soumis, ou *JOBD. Évitez un nom commençant par Q, réservé aux entrées d'IBM.
CMD—La commande à exécuter (512 caractères), le plus souvent un CALL. Sa syntaxe est contrôlée à l'ajout.
FRQ—*ONCE, *WEEKLY, *MONTHLY ou *YEARLY.
SCDDATE*CURRENTUne date, *MONTHSTR, *MONTHEND, ou *NONE si l'on utilise SCDDAY. Les deux s'excluent.
SCDDAY*NONELes jours de la semaine (*MON… *SUN), ou *ALL pour tous les jours.
SCDTIME*CURRENTL'heure de soumission.
RELDAYMON—Avec FRQ(*MONTHLY) et SCDDAY : la 1re, 2e… 5e occurrence du jour, ou *LAST.
OMITDATE*NONEJusqu'à 20 dates à sauter (jours fériés, fermeture…).
RCYACN*SBMRLSQue faire d'une soumission manquée parce que le système était arrêté.
SAVE*NOPour *ONCE : garder l'entrée après la soumission (*YES) ou la retirer.
JOBD*USRPRFLa description de travail du travail soumis.
JOBQ*JOBDLa file d'attente de travaux où il est soumis.
USER*CURRENTLe profil sous lequel il tourne : par défaut, celui qui ajoute l'entrée.
MSGQ*USRPRFOù envoyer les messages de soumission et de fin de travail.

Pour ajouter une entrée, il faut le droit *USE sur la commande, sur la description de travail, sur la file d'attente et sur le profil indiqué dans USER (avec *EXECUTE sur leurs bibliothèques).

Les fréquences, par l'exemple

Le couple FRQ / SCDDATE ou SCDDAY couvre presque tous les besoins. À ajouter à ADDJOBSCDE JOB(…) CMD(…) ; les dates s'écrivent au format de date du travail (jj/mm/aa sur notre système) :

Pour soumettre…Paramètres
Une seule fois, à une date et une heureFRQ(*ONCE) SCDDATE('20/10/26') SCDTIME('22:00:00')
Tous les jours à 3 h 30FRQ(*WEEKLY) SCDDAY(*ALL) SCDTIME('03:30:00')
Les jours ouvrés à 6 hFRQ(*WEEKLY) SCDDAY(*MON *TUE *WED *THU *FRI) SCDTIME('06:00:00')
Chaque samediFRQ(*WEEKLY) SCDDAY(*SAT) SCDTIME('20:00:00')
Le premier lundi du moisFRQ(*MONTHLY) SCDDAY(*MON) RELDAYMON(1) SCDTIME('07:00:00')
Les 1er et 3e lundis du moisFRQ(*MONTHLY) SCDDAY(*MON) RELDAYMON(1 3) SCDTIME('09:00:00')
Le dernier vendredi du moisFRQ(*MONTHLY) SCDDAY(*FRI) RELDAYMON(*LAST) SCDTIME('18:00:00')
Le premier jour du moisFRQ(*MONTHLY) SCDDATE(*MONTHSTR) SCDTIME('01:00:00')
Le dernier jour du moisFRQ(*MONTHLY) SCDDATE(*MONTHEND) SCDTIME('23:30:00')
Une fois par anFRQ(*YEARLY) SCDDATE('31/12/26') SCDTIME('20:00:00')
Le 31 n'existe pas tous les mois. Avec FRQ(*MONTHLY) et une date comme le 31, le travail n'est pas soumis les mois de 30 jours ni en février. Pour le dernier jour du mois, utilisez SCDDATE(*MONTHEND). Et pour un traitement « tous les jours », c'est bien FRQ(*WEEKLY) SCDDAY(*ALL) : il n'y a pas de fréquence quotidienne.

Notre démonstration sur un IBM i 7.5

Nous avons ajouté quatre entrées : une à exécuter une seule fois trois minutes plus tard, et trois récurrentes, aussitôt suspendues pour la démonstration.

Les commandes
/* Une seule fois, aujourd'hui à 13:36:29 ; l'entrée disparaît ensuite  */
ADDJOBSCDE JOB(UNEFOIS) CMD(DSPLIB LIB(JOBITRV) OUTPUT(*PRINT)) +
             FRQ(*ONCE) SCDDATE(*CURRENT) SCDTIME('13:36:29') +
             JOBD(JOBITRV/DEMOJOBD) JOBQ(QGPL/QBATCH) +
             TEXT('Démo : une seule fois')

/* Les jours ouvrés à 6 h                                               */
ADDJOBSCDE JOB(OUVRES) CMD(DSPLIB LIB(JOBITRV) OUTPUT(*PRINT)) +
             FRQ(*WEEKLY) SCDDATE(*NONE) +
             SCDDAY(*MON *TUE *WED *THU *FRI) SCDTIME('06:00:00') +
             JOBD(JOBITRV/DEMOJOBD) JOBQ(QGPL/QBATCH) +
             TEXT('Démo : jours ouvrés à 6 h')

/* Le premier lundi de chaque mois à 7 h                                */
ADDJOBSCDE JOB(PREMLUNDI) CMD(DSPLIB LIB(JOBITRV) OUTPUT(*PRINT)) +
             FRQ(*MONTHLY) SCDDATE(*NONE) SCDDAY(*MON) RELDAYMON(1) +
             SCDTIME('07:00:00') JOBD(JOBITRV/DEMOJOBD) +
             JOBQ(QGPL/QBATCH) TEXT('Démo : premier lundi du mois')

/* Le dernier jour du mois à 23 h 30, sauf le 31/12, sans rattrapage   */
ADDJOBSCDE JOB(FINMOIS) CMD(DSPLIB LIB(JOBITRV) OUTPUT(*PRINT)) +
             FRQ(*MONTHLY) SCDDATE(*MONTHEND) SCDTIME('23:30:00') +
             OMITDATE('31/12/26') RCYACN(*NOSBM) +
             JOBD(JOBITRV/DEMOJOBD) JOBQ(QGPL/QBATCH) +
             TEXT('Démo : fin de mois sauf 31/12')

/* Les trois entrées récurrentes sont suspendues après la démonstration */
HLDJOBSCDE JOB(OUVRES)
HLDJOBSCDE JOB(PREMLUNDI)
HLDJOBSCDE JOB(FINMOIS)

WRKJOBSCDE les liste, avec la prochaine date de soumission que le système a calculée. On y voit aussi PRGAUDRCV, une vraie entrée de notre système qui purge chaque nuit à 3 h 30 les récepteurs d'audit de plus de 90 jours :

Écran 5250 Gestion des postes du planning des travaux : FINMOIS, OUVRES et PREMLUNDI suspendus, PRGAUDRCV et UNEFOIS planifiés, avec leur prochaine date de soumission
WRKJOBSCDE : FINMOIS sera soumis le 31/10, OUVRES le 16/10 (le lendemain, vendredi), PREMLUNDI le 02/11 (premier lundi de novembre). HLD : suspendue, SCD : planifiée.

L'option 5 affiche une entrée en détail, avec le résultat de sa dernière soumission :

Écran 5250 Détails d'un poste du planning des travaux PREMLUNDI : jour planifié *MON, heure 07:00:00, fréquence *MONTHLY, jour relatif 1, prochaine date de soumission 02/11/26
L'entrée PREMLUNDI : *MON, jour relatif 1, prochaine soumission le 02/11/26.
Écran 5250 Détails d'un poste du planning des travaux PREMLUNDI, suite : file d'attente RLS/SBS, description de travail DEMOJOBD, planifié par SAKADM, profil utilisateur SAKADM
Suite : la file d'attente est bien rattachée à un sous-système (RLS/SBS), le travail tournera sous SAKADM, qui a ajouté l'entrée.

L'entrée UNEFOIS, à 13:36:29

À l'heure dite, le travail 012166/SAKADM/UNEFOIS est entré dans le système à 13:36:29, sans une seconde d'écart, s'est exécuté et s'est terminé normalement. Son historique dit qui l'a soumis :

CPF1124  Travail 012166/SAKADM/UNEFOIS démarré le 15/10/26 à
         13:36:29 dans le sous-système QBATCH de QSYS ; soumis le 15/10/26 à
         13:36:29.
CPI1125  Travail 012166/SAKADM/UNEFOIS soumis.
         Le travail 012166/SAKADM/UNEFOIS a été soumis en file
         d'attente de travaux QBATCH de QGPL à partir du travail 011426/QSYS/QJOBSCD.
         Le travail 012166/SAKADM/UNEFOIS a été démarré par la commande SBMJOB
         (Soumettre un travail) avec les attributs : JOBPTY(5) OUTPTY(5) PRTTXT()
         RTGDTA(QCMDI) SYSLIBL(QSYS       QSYS2      QHLPSYS    QUSRSYS)
         CURLIB(*CRTDFT) INLLIBL(JOBITRV    QGPL       QTEMP) INLASPGRP(*NONE) LOG(4
         00 *SECLVL) LOGCLPGM(*NO) LOGOUTPUT(*JOBEND) OUTQ(JOBITRV/DEMOOUTQ) […]
*NONE    -DSPLIB LIB(JOBITRV) OUTPUT(*PRINT)
CPF1164  Travail 012166/SAKADM/UNEFOIS arrêté le 15/10/26 à
         13:36:29; temps UC 0,007; code fin 0 .

Deux constats :

  • C'est le travail système QSYS/QJOBSCD qui a soumis le travail.
  • Le travail a reçu la liste de bibliothèques de sa JOBD (INLLIBL(JOBITRV QGPL QTEMP)), ses données de routage (QCMDI) et sa file de sortie. C'est l'inverse d'un SBMJOB tapé dans une session, qui prend par défaut la liste et la file de sortie de la session (le piège de la page JOBQ et JOBD). Pour un travail planifié, c'est donc la JOBD qu'il faut soigner.

Comme son SAVE valait *NO, l'entrée a disparu du planning après la soumission :

Écran 5250 Gestion des postes du planning des travaux après l'exécution : FINMOIS, OUVRES, PREMLUNDI et PRGAUDRCV, l'entrée UNEFOIS a disparu
WRKJOBSCDE après 13:36:29 : UNEFOIS n'y est plus.

Gérer les entrées

Depuis WRKJOBSCDE : 2 modifie, 3 suspend, 4 retire, 5 affiche le détail, 6 libère, 8 montre le travail de la dernière soumission, 10 soumet tout de suite (pratique pour tester une entrée sans attendre). Les mêmes actions existent en commandes :

WRKJOBSCDELister et gérer les entrées du planning.
ADDJOBSCDEAjouter une entrée.
CHGJOBSCDEModifier une entrée (heure, jours, commande…).
HLDJOBSCDESuspendre une entrée.
RLSJOBSCDELibérer une entrée suspendue.
RMVJOBSCDERetirer une entrée.
SBMJOBSoumettre un travail une fois, à une date et une heure (SCDDATE, SCDTIME).
  • Suspendre puis libérer ne rattrape rien : une entrée libérée ne soumet pas les heures passées pendant sa suspension ; elle repart à la prochaine date prévue.
  • Pour retirer les entrées des autres, il faut le droit spécial *JOBCTL ; sans lui, on ne retire que les siennes.
  • Chaque entrée est identifiée par son nom et un numéro à 6 chiffres attribué par le système : deux entrées peuvent porter le même nom.
  • La zone de données locale (*LDA) du travail soumis est vide au démarrage.

En SQL, QSYS2.SCHEDULED_JOB_INFO donne tout le planning :

SELECT SCHEDULED_JOB_NAME, STATUS, FREQUENCY, SCHEDULED_TIME,
       SCHEDULED_DAYS, NEXT_SUBMISSION_DATE, COMMAND_STRING
  FROM QSYS2.SCHEDULED_JOB_INFO
 ORDER BY NEXT_SUBMISSION_DATE

Et si le système est arrêté à l'heure prévue ?

Système éteint ou en état restreint (pendant une sauvegarde complète, par exemple) : aucune entrée ne peut être soumise. Au prochain démarrage, ou à la sortie de l'état restreint, chaque entrée suit son action de reprise (RCYACN) :

*SBMRLSLe travail est soumis (valeur par défaut).
*SBMHLDLe travail est soumis mais suspendu en file : un opérateur décide.
*NOSBMLe travail n'est pas soumis ; l'entrée attend sa prochaine date.

Même si plusieurs heures ont été manquées, le travail n'est soumis qu'une fois, et les entrées sont traitées dans l'ordre de leurs heures. D'autres travaux peuvent démarrer pendant ce temps. Pour un traitement qui n'a de sens qu'à son heure, choisissez *NOSBM, comme notre entrée FINMOIS.

Planning ou SBMJOB à heure fixe ?

Pour une exécution unique, il y a plus simple : SBMJOB … SCDDATE(…) SCDTIME(…). Le travail entre tout de suite dans la file d'attente, en état planifié, et n'en sort qu'à l'heure dite. Nous l'avons vérifié :

SBMJOB CMD(DSPLIB LIB(JOBITRV) OUTPUT(*PRINT)) JOB(PLUSTARD) +
       JOBD(JOBITRV/DEMOJOBD) JOBQ(QGPL/QBATCH) +
       SCDDATE(*CURRENT) SCDTIME('23:59:00')

JOB_NAME                JOB_STATUS  JOB_QUEUE_STATUS  JOB_SCHEDULED_TIME
012168/SAKADM/PLUSTARD  JOBQ        SCHEDULED         2026-10-15 23:59:00
Entrée de planning (ADDJOBSCDE)SBMJOB à heure fixe
Où vit-elle ?Dans l'objet permanent QDFTJOBSCDDans la file d'attente, en état planifié
RécurrenceUne fois, chaque semaine, mois ou annéeUne seule fois
Si l'on vide la fileRien n'est perduLe travail est perdu
Attributs du travailCeux de la JOBD et du profilCeux de SBMJOB, donc souvent de la session
SauvegardeAvec QUSRSYSNon

Au-delà, pour enchaîner des travaux (« B quand A est fini »), gérer des calendriers de jours fériés ou suivre un historique d'exécution, IBM propose un produit à part, IBM Advanced Job Scheduler for i (5770-JS1), installé sur notre système. Le planning de base, lui, est livré avec IBM i.

À retenir

  • ADDJOBSCDE ajoute une entrée ; QJOBSCD soumet le travail à l'heure dite.
  • Tous les jours : FRQ(*WEEKLY) SCDDAY(*ALL) ; fin de mois : SCDDATE(*MONTHEND).
  • Le travail planifié prend les attributs de sa JOBD : soignez-la.
  • Après un arrêt, RCYACN décide, et une seule soumission est rattrapée.

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

Comment planifier un travail sur IBM i ?

Avec une entrée du planning des travaux : ADDJOBSCDE JOB(NOM) CMD(CALL MONPGM) FRQ(*WEEKLY) SCDDAY(*ALL) SCDTIME('03:30:00') soumet le programme chaque jour à 3 h 30. WRKJOBSCDE liste et gère les entrées.

Comment planifier un travail tous les jours ?

FRQ(*WEEKLY) avec SCDDAY(*ALL) : le travail est soumis chaque jour de la semaine. Pour les seuls jours ouvrés, SCDDAY(*MON *TUE *WED *THU *FRI).

Que se passe-t-il si le système est arrêté à l'heure prévue ?

Le paramètre RCYACN de l'entrée décide, au prochain démarrage : *SBMRLS (valeur par défaut) soumet le travail, *SBMHLD le soumet suspendu, *NOSBM ne le soumet pas. Même si plusieurs heures ont été manquées, le travail n'est soumis qu'une fois.

Quelle différence entre ADDJOBSCDE et SBMJOB SCDTIME ?

SBMJOB SCDDATE/SCDTIME met le travail tout de suite dans la file d'attente, en état planifié, pour une seule exécution : si l'on vide la file, il est perdu. Une entrée ADDJOBSCDE vit dans un objet permanent, revient autant qu'on veut, et ne soumet le travail qu'à l'heure dite.

Quel programme soumet les travaux planifiés ?

Le travail système QJOBSCD, qui surveille les heures des entrées. Sur notre IBM i 7.5, l'historique du travail planifié indique qu'il a été soumis à partir de QSYS/QJOBSCD.