source: TOOLS/PACK_IPSL/parallelPack.sh @ 1853

Last change on this file since 1853 was 1853, checked in by gpincka, 12 years ago

principalement : enchainement du launcher parallele + gestion reprise du code parallele

  • Property svn:executable set to *
File size: 6.8 KB
Line 
1#!/bin/bash
2
3function insertDirectives
4{
5   
6    local batchFile="launch_and_measureTime.sh"
7    local lineBeginMutableDrves=`grep -n "batch directives : begin" $batchFile | awk -F":" '{print $1}' `
8    local lineHeaderMutableDrves=`grep -n "mutable directives" $batchFile | awk -F":" '{print $1}' `
9    local lineEndMutableDrves=`grep -n "batch directives : end" $batchFile | awk -F":" '{print $1}' `
10    if [ "x${lineBeginMutableDrves}" == "x" ] || [ "x${lineHeaderMutableDrves}" == "x" ] || [ "x${lineEndMutableDrves}" == "x" ]
11    then
12        echo "Examen du fichier $batchFile :"
13        echo "Il manque les balises commentees 'mutable directives' et 'batch directives : end' "
14        exit 1
15    fi
16   
17    # echo "lineHeaderMutableDrves=$lineHeaderMutableDrves"
18    # echo "lineEndMutableDrves=$lineEndMutableDrves"
19   
20    if [ $lineHeaderMutableDrves -ge $lineEndMutableDrves ]
21    then
22       echo "Examen du fichier $batchFile :"
23       echo "les lignes 'mutable directives' et 'batch directives : end' n'existent pas ou ne sont"
24       echo "pas bien placees l'une par rapport a l'autre ==> STOP."
25       exit 1
26    fi
27   
28    # Suppression des anciennes directives
29    local firstLineToMove=$(( $lineHeaderMutableDrves + 1 ))
30    local lastLineToMove=$(( $lineEndMutableDrves - 1 ))
31    if [ $firstLineToMove -lt $lineEndMutableDrves ]
32    then
33        sed -i "${firstLineToMove},${lastLineToMove}d" $batchFile
34    fi
35       
36    # insertion des directives chargees a partir de "load_batch_directives.sh"
37    local lineEndMutableDrves=`grep -n "batch directives : end" $batchFile | awk -F":" '{print $1}' `
38    sed -i "${lineEndMutableDrves}i\#MSUB -Qos $QosType" $batchFile
39    sed -i "${lineEndMutableDrves}i\#MSUB -q $queueType" $batchFile
40    sed -i "${lineEndMutableDrves}i\#MSUB -A $projectName" $batchFile
41    sed -i "${lineEndMutableDrves}i\#MSUB -T $computationTime" $batchFile
42    sed -i "${lineEndMutableDrves}i\#MSUB -n $nbProcs" $batchFile
43   
44    # insertion des directives specifiant les sorties des operations de pack
45    sed -i "${lineEndMutableDrves}i\#MSUB -e ${DETAILLED_OUTPUT}/pack_ipsl_%I.e" $batchFile
46    sed -i "${lineEndMutableDrves}i\#MSUB -o ${DETAILLED_OUTPUT}/pack_ipsl_%I.o" $batchFile
47
48}
49
50function check_machine
51{
52    local host_name=`hostname `
53    local isMachineTitane=`echo $host_name | grep "titane" | wc -l `
54    local isMachineCurie=`echo $host_name | grep "curie" | wc -l `
55   
56    if [ "x${isMachineTitane}" == "x0" ] && [ "x${isMachineCurie}" == "x0" ]
57    then
58        echo "Ce programme doit etre lance a partir 'curie' ou 'titane'. STOP."
59        exit 1
60    fi
61
62}
63
64function getNumeroOfPreviousTry
65{
66   local num_try="0"
67   ici=$PWD
68   cd $USER_OUTPUT_PROGRESS
69   
70   tryDirs=`ls | grep -e 'TRY__[[:digit:]]\{1,2\}$' `
71   for dir in $tryDirs
72   do
73      num=`echo $dir | awk -F"__" '{print $NF}' `
74      if [ $num -gt $num_try ]
75      then
76          num_try=$num 
77      fi
78   done 
79   cd $ici
80   echo $num_try
81   
82}
83
84########  pour option -f #############
85restartExecFromZero=0
86while [ $# -gt 0 ]
87do
88   echo "boucle sur les arguments du script ..."
89   echo "@=$@"
90   case $1 in
91   -f)  restartExecFromZero=1
92        echo "force restart from the beginning ..."
93        ;;
94   esac
95   shift
96done
97export restartExecFromZero=${restartExecFromZero}
98######################################
99
100# On charge les variables d'environnement
101. load_ipslPack_env.sh
102
103# On charge les directives batch
104. load_batch_directives.sh
105
106# on verifie que la machine est 'curie' ou 'titane'
107check_machine
108
109#########  On insert les directives batch en en-tete du script "launch_and_measureTime.sh"         ##########
110#########  lance plus loin. Seules les directives de nom du job et de sorties restent inchangees   ##########
111
112insertDirectives
113
114# exit 0 # gpdebug : a virer
115
116# export inputCmd="${USER_OUTPUT_PROGRESS}/inputCmd.list"
117# export nextInputCmd="${USER_OUTPUT_PROGRESS}/nextInputCmd.list"
118# export output="${USER_OUTPUT_PROGRESS}/packOutput.log"
119# export reportFile="${USER_OUTPUT_PROGRESS}/report.log"
120
121########## Si l'option -f est activee, on detruit tous les fichiers status  ##########
122if [ "x$restartExecFromZero" == "x1" ]
123then
124    echo "Deleting  all status files ..."
125    for CONFIG in $( awk '{print $1}' ${IGCM_DEM}/config_card.liste )
126    do
127       PATH_SIMU=$( dirname $CONFIG )
128       ListStatFileInSimu=`find $PATH_SIMU -type f -name "*status" `
129       if [ "x$ListStatFileInSimu" != "x" ]
130       then
131           for file in $ListStatFileInSimu
132           do
133              if [ -e $file ]
134              then
135                 rm -f $file
136              fi
137       
138           done     
139       fi   
140    done
141    echo "Deletion done."
142fi
143
144
145# Par ailleurs, on vide les fichiers de cmds, d'output et de rapport si option -f activee
146if [ "x${restartExecFromZero}" == "x1" ]
147then
148    rm -rf ${USER_OUTPUT_PROGRESS}/TRY__*
149fi
150
151# exit 0 # a virer
152
153#####################################################################################
154
155export JOB_DIR=${LS_SUBCWD:-${PWD}}
156export EXE_DIR=${JOB_DIR}
157source ${EXE_DIR}/DEM_utilities.sh
158
159############## gpdebug : Pour gestion des erreurs #########################################
160# Execute la function errorReceive() si reception d'un signal TERM
161trap 'DEM_errorReceive' TERM
162# liste des processus à détruire en cas d'erreur bloquante
163export listPID=$$
164# fichier pour la transmission des messages d'erreur d'un fils au prog principal
165export errorMsgFile="${PWD}/errorMsg.txt"
166############## gpdebug : fin ##############################################################
167
168check_nco_version # verification de la version de nco #######################
169
170# penser a arreter le present script si le module "libccc_user" n'a pas ete charge
171
172export badFailureFile=${USER_OUTPUT_PROGRESS}/badFailure.txt
173> $badFailureFile # nouvel essai, on vide le fichier d'erreur
174tryNumFile=${USER_OUTPUT_PROGRESS}/numero_current_try.txt
175numPreviousTry=$( getNumeroOfPreviousTry )
176# echo "numPreviousTry=$numPreviousTry"
177numNewTry=$(( $numPreviousTry + 1 ))
178
179# Pas de 4eme essai permis
180# ----------------------------
181if [ $numNewTry -ge 3 ]
182then
183    echo "Pas de 4eme essai permis"
184    exit 1
185fi
186
187# echo "numNewTry=$numNewTry"
188mkdir -p ${USER_OUTPUT_PROGRESS}/TRY__${numNewTry}
189echo $numNewTry > $tryNumFile
190
191# exit 0 # a virer
192
193
194
195export timeHandlingFile="${USER_OUTPUT_PROGRESS}/timeHandlingFile.txt"
196> $timeHandlingFile
197startTime=$( getDateMilliSeconds )
198echo "launch time:$startTime" >> $timeHandlingFile
199
200SCRIPT_NAME=$(basename ${0} )
201
202DEM_log -0 "Demarrage de ${SCRIPT_NAME}"
203
204# ccc_msub -A tgcc0013 launch_and_measureTime.sh
205ccc_msub launch_and_measureTime.sh
206
207DEM_log -0 "Fin de ${SCRIPT_NAME}"
208
209
210elapsedTime=0
211while [ $elapsedTime -lt 500 ]
212do
213    sleep 5
214    elapsedTime=$(( $elapsedTime + 5 ))
215    isFailureFileEmpty=`cat $badFailureFile | wc -l `
216    if [ "x${isFailureFileEmpty}" != "x0" ]
217    then
218       sleep 2 # on attend que le fichier soit correctement rempli
219       cat $badFailureFile
220       exit 0
221    fi
222done
223
224
225
226
Note: See TracBrowser for help on using the repository browser.