Publié le 12 septembre 2019
Voici un exemple de jobs avec dépendances (qsub -hold_jid) utilisé pour copier des données depuis le /archive vers le /work via la file "transfer" dédiée à cet usage.
Pour rappel : l’espace de stockage /archive n’est pas disponible directement sur les nœuds batch.
Dans l’exemple, le nom du fichier est copy_job.ksh :
#!/bin/ksh
# copy task from ARG $1 to ARG $2
# transfer queue (/user1, /work and /archive are available)
#$ -q transfer
#$ -pe smp 1
# no mail
#$ -m n
[[ -e "$1" ]] || {
echo "error arg 1 : source data not found : $1"
exit 1
}
[[ -z "$2" ]] && {
echo "error arg 2 : destination empty"
exit 2
}
echo "Copying data from $1 to $2"
cp -pr "$1" "$2"
# wait 10 seconds
sleep 10
Dans l’exemple, le nom du fichier est compute_job.ksh :
#!/bin/ksh
# compute task
#$ -q batch
#$ -pe smp 2
#$ -M antoine.migeon@u-bourgogne.fr
[[ -e "$1" ]] || {
echo "error arg 1 : compute data not found : $1"
exit 1
}
echo "compute data located in $1"
cd $1
#....
Dans cet exemple nous allons soumettre pour chaque jeu de données (nommés data_to_compute_1 data_to_compute_2 data_to_compute_3), un job de traitement des données (nommés compute_1 compute_2 compute_3) qui aura comme dépendance un job de copie (nommé cp_1 cp_2 cp_3).
for job in 1 2 3
do
# copy job
qsub -N cp_${job} copy_job.ksh $ARCHIVEDIR/data_to_compute_${job} $WORKDIR/project/
# compute job will wait for the copy job to be finished
qsub -N compute_${job} -hold_jid cp_${job} compute_job.ksh $WORKDIR/project/data_to_compute_${job}
done
Le job compute_1 commencera dès que le job cp_1 sera terminé.