Notification automatique de l’état d’achèvement du travail qsub

J’ai un script shell qui appelle cinq autres scripts. Le premier script crée 50 jobs qsub dans le cluster. Le temps d’exécution d’un travail individuel varie de quelques minutes à une heure. Je dois savoir quand tous les 50 emplois sont terminés car après avoir terminé tous les travaux, je dois exécuter le deuxième script. Comment savoir si tous les jobs qsub sont terminés ou non? Une solution possible consiste à utiliser une boucle infinie et à vérifier l’état du travail en utilisant la commande qstate avec l’ID du travail. Dans ce cas, je dois vérifier le statut du travail en continu. Ce n’est pas une excellente solution. Est-il possible qu’après l’exécution, le travail qsub m’en informe par lui-même. Par conséquent, je n’ai pas besoin de surveiller fréquemment le statut du travail.

Je n’ai jamais entendu parler de comment faire cela et je serais vraiment intéressé si quelqu’un venait avec une bonne réponse.

En attendant, je suggère que vous utilisiez des astuces de fichiers. Soit votre script génère un fichier à la fin, soit vous vérifiez l’existence des fichiers journaux (en supposant qu’ils ne soient créés qu’à la fin).

 while [ ! -e ~/logs/myscript.log-1 ]; do sleep 30; done 

qsub est capable de gérer les dépendances de travail, en utilisant -W depend=afterok:jobid .

par exemple

 #!/bin/bash # commands to run on the cluster COMMANDS="script1.sh script2.sh script3.sh" # intiliaze JOBID variable JOBIDS="" # queue all commands for CMD in $COMMANDS; do # queue command and store the job id JOBIDS="$JOBIDS:`qsub $CMD`" done # queue post processing, depended on the submitted jobs qsub -W depend=afterok:$JOBIDS postprocessing.sh exit 0 

Plus d’exemples peuvent être trouvés ici http://beige.ucs.indiana.edu/I590/node45.html