Août 30 2016

Lister les JOBQ des Profils AS400

Publié par à 6:44 sous AS400




Je veux faire un peu de ménage sur le système comme les travaux des utilisateurs s’exécutent dans toutes sortes de files d’attente. Les JOBQ sont définies dans des JOBD (Job Description) elles-mêmes assignées aux profils utilisateurs. Je peux récupérer facilement les descriptions de travail avec la commande WRKUSRPRF mais récupérer toutes les files d’attente est un peu plus délicat.
Si vous êtes habitué à PASE, on y parvient facilement et on peut même affecter des nouvelles JOBD à des profils en se basant sur des critères définis.
 
Connectez-vous à l’environnement PASE soit en exécutant ‘CALL QP2TERM’ ou en SSH si le service a été activé.
Copiez le code shell suivant dans un fichier (appelons-le listJobq.sh) dans l’IFS, dans votre répertoire maison par exemple, rendez-le exécutable
chmod +x listJobq.sh
et lancez:
./listJobq.sh
 

#!/QOpenSys/usr/bin/ksh

IFS='
'
# Uncomment or run once and for all from a 5250 session
# Make sure the ADMIN library exists
#system "DSPUSRPRF USRPRF(*ALL) OUTPUT(*OUTFILE) OUTFILE(ADMIN/USERLIST)"

printf "%11s%11s%11s\n" "USRPRF" "JOBD" "JOBQ"

for i in $(db2 "select upuprf,upjbds from ADMIN.USERLIST" | \
      sed -e '1,3 d' -e '/^$/ d' | sed -e '$ d'); do
  unset IFS
  set -A user $i
  jobq=`system -i "DSPJOBD JOBD(${user[1]})" | awk '/^ Fi/ {print $NF;exit;}'`
  printf "%11s%11s%11s\n" "${user[0]}" "${user[1]}" "$jobq"
done

 
Voici le résultat:

     USRPRF       JOBD       JOBQ
  ABERTRAND    DEFAULT     QBATCH
  GBOUBOURS    DEFAULT     QBATCH
    IBURNET         IT      QPGMR
   PBUISSON    DEFAULT     QBATCH
    PMARTIN    DEFAULT     QBATCH
        ...        ...        ...

 
Le système pourrait retourner un message « db2: cannot execute » ou « /usr/bin/db2: Permission denied ». Créez un lien symbolique comme ceci:
ln -s /QOpenSys/usr/bin/qsh /QOpenSys/usr/bin/db2
La raison est détaillée dans cette explication.
 
Un inconvénient est la lenteur de la commande « system ». L’option -i la rend un peu plus rapide mais ce n’est toujours pas assez rapide. Si vous avez installé le paquet OPS (Open Source) d’IBM avec les PTF correspondantes et bash, vous pouvez essayer cette version optimisée avec tables de hachage en bash.
On stocke les jobd/jobq dans une table de hachage qui agit comme un cache puisque les descriptions de travail retournent toujours les mêmes JOBQ. Si beaucoup d’utilisateurs ont la même JOBD, ca peut être très efficace (35 fois plus rapide dans mon cas).
 

#!/usr/bin/bash

IFS='
'
declare -A JOBQ

# Uncomment or run once and for all from a 5250 session
# Make sure the ADMIN library exists
#system "DSPUSRPRF USRPRF(*ALL) OUTPUT(*OUTFILE) OUTFILE(ADMIN/USERLIST)"

printf "%11s%11s%11s\n" "USRPRF" "JOBD" "JOBQ"

for i in $(db2 "select upuprf,upjbds from ADMIN.USERLIST" | \
      sed -e '1,3 d' -e '/^$/ d' | sed -e '$ d'); do
  unset IFS
  # Sets username and jobd in user[0] and user[1]
  user=($i)
  # Add jobq to hash table
  if [ -z ${JOBQ[${user[1]}]} ]; then
    jobq=`system -i "DSPJOBD JOBD(${user[1]})" | awk '/^ Fi/ {print $NF;exit;}'`
    JOBQ[${user[1]}]=$jobq
  fi
  printf "%11s%11s%11s\n" "${user[0]}" "${user[1]}" "${JOBQ[${user[1]}]}"
done

No responses yet

Comments RSS

Leave a Reply