14 avril 2004

Mettre en place une file d'attente sous Unix avec qconfig

Sous système AIX, le fichier /etc/qconfig décrit les queues et matériels disponibles par la commande enq, laquelle place les requêtes en attente, et par qdaemon, qui exécute les actions et nettoie la queue. En temps normal ce système est utilisé pour les impressions, mais il est possible de l'utiliser pour l'exécution de traitements.

Exemple :
Une queue de traitements batch se déclare de cette façon :
bsh:
  discipline = fcfs
  device = bshdev
bshdev:
  backend = /usr/bin/ksh


Pour exécuter un script nommé MonShell.sh en utilisant cette queue batch, tapez :
qprt -Pbsh MonShell.sh

Le système exécute les traitements un par un, dans l'ordre dans lequel ils ont été soumis. Le processus qdaemon redirigera les sorties standard (input, standard output, et erreur) vers /dev/null (la poubelle).

Pour permettre l'exécution de deux traitements en parallèle, déclarez :
bsh:
  discipline = fcfs
  device = bsh1,bsh2
bsh1:
  backend = /usr/bin/ksh
bsh2:
  backend = /usr/bin/ksh


Il est même possible de demander un traitement sur un serveur distant ! Ci dessous par exemple, on crée localement une queue nommée "remh" qui passera la commande à la queue "bsh" préalablement déclarée sur un serveur "pluto" (à référencer dans le etc/hosts ou le DNS de l'entreprise) :

remh: 
  device = rd0 
  host = pluto 
  rq = bsh 
rd0: 
  backend = /usr/lib/lpd/rembak

A noter :
  • La commande "enq" convertit automatiquement le fichier qconfig en binaire (/etc/qconfig.bin).
  • Le fichier qconfig ne doit pas être édité tant que des travaux sont présents dans les queues (édition manuelle ou via commande mkque, rmque, chque, mkquedev, rmquedev, chquedev),
  • La commande "enq -G" suspend la queue une fois tous les traitements terminés,
  • La commande "startsrc -s qdaemon" redémarre le démon.

Mise en place


Je n'ai pas eu l'occasion de tester cet outil, mais il me semble intéressant ...
Ci dessous ce que j'en ferais :

1) Faites paramétrer les files d'attente via le fichier /etc/qconfig (AIX).

Attention :
  • Ceci est de la prérogative de l'administrateur Unix de la machine, 
  • Ce paramétrage est fait pour la machine, c'est a dire pour toutes les applications hébergées.

Par exemple pour 3 files d’attente nommées « bshnjl », « bshnbx » et « bshall » de respectivement 4, 4 et 9 batchs pour les paies à la demande, les paies de correction et explorations, les autre batch :

bshnjl:
  discipline = fcfs
  device = bshnjl1,bshnjl2,bshnjl3,bshnjl4

bshnjl1:
  backend = /usr/bin/ksh
...

bshnjl4:
  backend = /usr/bin/ksh


bshnbx:
  discipline = fcfs
  device = bshnbx1,bshnbx2,bshnbx3,bshnbx4

bshnbx1:
  backend = /usr/bin/ksh
...

bshnbx4:
  backend = /usr/bin/ksh


bshall:
  discipline = fcfs
  device = bshall1,bshall2,bshall3,bshall4
,bshall5,bshall6,bshall7,bshall8,bshall9
bshall1:
  backend = /usr/bin/ksh
...

bshall9:
  backend = /usr/bin/ksh
 

2) Sous HR Access, modifiez le script ${SIGACS}/bin/job.

Exemple ci joint :
- les paies à la demande NJL sont lancées sur la queue bshnjl
- les paies de correction et explorations sur la queue bshnbx
- tous les autre batch sur la queue bshall

...
# Lancement d'un script de $SIGACS/bin
if [ ! "$T" ]
then
  JSCRI=`echo "$PARAM"|cut –c14-21| tr –d ‘ ‘`

  echo "sh $SIGACS/bin/$PHASE '$PARAM' 1>$LOG/$JOBLOG 2>&1; rm \${0}" > $TMP/OPER.$$.pendingjob
  case ${JSCRI} in
  [A-Z,0-9]*NJL)
 
qprt -Pbshnjl "$TMP/OPER.$$.pendingjob" 2>> $TMP/a.batch
    ;;
  [A-Z,0-9]*NJC|[A-Z,0-9]*NBX)
 
qprt -Pbshnbx "$TMP/OPER.$$.pendingjob" 2>> $TMP/a.batch
    ;;
  *)
 
qprt -Pbshall "$TMP/OPER.$$.pendingjob" 2>> $TMP/a.batch
    ;;
  esac
else
...

Aucun commentaire:

Enregistrer un commentaire