14 avril 2004

Mettre en place une file d'attente sous Unix avec "at"

En l'absence d'ordonnanceur, pour limiter le nombre de processus batch actifs, il est possible de soumettre ces travaux dans les files d’attentes Unix. Il y a 6 files d’attente; deux sont réservées pour le système, certaines à des shells particuliers (ex : f pour le csh). Préférer les queues a (aussi utilisée par la commande at - qu'il vaut donc mieux laisser le plus libre possible), b (aussi utilisée par la commande batch), et e :
  • "c" - cron events, réservée au système Unix
  • "d" - sync events, réservée au système Unix
  • "b" - batch jobs
Les autres sont dédiées à un langage shell :
  • "a" - sh jobs - at jobs 
  • "e" - ksh jobs 
  • "f" - csh jobs
Par défaut c'est la file "a" qui est utilisée. Une tâche peut toutefois être envoyée sur une autre queue ("e" dans cet exemple) à une heure particulière (21:20 dans notre exemple) :

echo "sh monshell.sh > $LOG/monlog.log" | at -qe 2120

La commande "at -l" permet de lister les travaux placés en attente, "at -r" de les supprimer :
at -l
hr.1044415211.e mar  4 fév 21:20:11 CST 2003


Le format du nom du travail est : <UserUnix>.<IdTravail>.<NomQueue>. Sur AIX ils sont stockés dans le répertoire /var/adm/cron/atjobs :
ls /var/spool/cron/atjobs/hr.*.?
/var/spool/cron/atjobs/hr.1044415211.e


Et la commande soumise peut être consultée en fin du fichier :
tail -1 /var/spool/cron/atjobs/hr.1044415211.e
sh monshell.sh > $LOG/monlog.log


Quand le nombre maximum de batch en cours d'exécution est atteint pour une file d'attente, les suivants restent dans le tampon du "at" (visibles par un "at -l") d'ici à ce qu'un des batch se termine et libère une place.

L'heure de soumission n'est donc pas forcément identique à l'heure de début d'exécution. Il pourra être nécessaire d'informer les utilisateurs de cette caractéristique. 

Mise en place

1) Faites paramétrer les files d'attente via le fichier /var/adm/cron/queuedefs (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 « e », « b » et « a » de respectivement 4, 4 et 9 batchs pour les paies à la demande, les paies de correction et explorations, les autre batch, avec comme priorités 20, 25, 30 (20 étant plus prioritaire que 25) :

e.04j20n60w
b.04j25n60w
a.09j30n60w


Signifie :
  • queue e : 4 batch (jobs) de priorité (nice) normale (20),
  • queue b : 4 batch de priorité réduite (25),
  • queue a : 9 batch de priorité basse (30),
  • bilan (wait) toutes les 60 secondes
2) Sous HR Access, modifiez le script ${SIGACS}/bin/job.

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

...
# Lancement d'un script de $SIGACS/bin
if [ ! "$T" ]
then
  JSCRI=`echo "$PARAM"|cut –c14-21| tr –d ‘ ‘`
  case ${JSCRI} in
  [A-Z,0-9]*NJL)
  echo "sh $SIGACS/bin/$PHASE '$PARAM' 1>$LOG/$JOBLOG 2>&1 " | at -qe now 2>> $TMP/a.batch
    ;;
  [A-Z,0-9]*NJC|[A-Z,0-9]*NBX)
  echo "sh $SIGACS/bin/$PHASE '$PARAM' 1>$LOG/$JOBLOG 2>&1 " | at -qb now 2>> $TMP/a.batch
    ;;
  *)
  echo "sh $SIGACS/bin/$PHASE '$PARAM' 1>$LOG/$JOBLOG 2>&1 " | at -qa now 2>> $TMP/a.batch
    ;;
  esac
else
...

Aucun commentaire:

Enregistrer un commentaire