source: TOOLS/PACK_IPSL/parallelPack.sh @ 1912

Last change on this file since 1912 was 1912, checked in by aclsce, 12 years ago
  • Forgot these files were modified (via sed command)
  • Property svn:executable set to *
File size: 9.1 KB
RevLine 
[1849]1#!/bin/bash
2
[1853]3function insertDirectives
4{
5   
[1912]6    local batchFile="${TMP_MIGR_DATA}/launch_and_measureTime.sh"
[1853]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
[1856]64function check_glost_launch
65{
66    local file_exec='glost_launch'
67    if [ ! -e $file_exec ]
68    then
69        echo "Il n'y a pas l'executable glost_launch."
70        echo "Vous devez compiler l'outil via make. "
71        exit 1
72    fi
[1870]73}
[1856]74
[1870]75function checkParameters
76{
77    isCheckVarOK=`echo $doYouWantCheck | grep -E '^(yes|no)$' | wc -l `
78    if [ "x${isCheckVarOK}" == "x0" ]
79    then
80        echo "La variable 'doYouWantCheck' doit etre yes ou no"
81        exit 1
82    fi
[1873]83   
84    isRestartVarOK=`echo $forceRestartFromBegin | grep -E '^(yes|no)$' | wc -l `
85    if [ "x${isRestartVarOK}" == "x0" ]
86    then
87        echo "La variable 'forceRestartFromBegin' doit etre yes ou no"
88        exit 1
89    fi
[1856]90}
91
92
[1853]93function getNumeroOfPreviousTry
94{
95   local num_try="0"
96   ici=$PWD
97   cd $USER_OUTPUT_PROGRESS
98   
99   tryDirs=`ls | grep -e 'TRY__[[:digit:]]\{1,2\}$' `
100   for dir in $tryDirs
101   do
102      num=`echo $dir | awk -F"__" '{print $NF}' `
103      if [ $num -gt $num_try ]
104      then
105          num_try=$num 
106      fi
107   done 
108   cd $ici
109   echo $num_try
110   
111}
112
[1873]113# indique si l'on recommence les traitement depuis le debut ou non
114restartExecFromZero=0
115
[1885]116# indique si l'on veut effacer les fichiers d'entrée ou non
117deleteFiles=0
118
[1873]119# On charge les variables d'environnement
120. load_ipslPack_env.sh
121
122# On charge les directives batch
123. load_batch_directives.sh
124
125# On charge les parametres
126. loadParameters.sh
127
128checkParameters
129
130if [ "x${forceRestartFromBegin}" == "xyes" ]
131then
132     restartExecFromZero=1
133fi
134
135
136# on verifie que la machine est 'curie' ou 'titane'
137check_machine
138
139
140
141# on verifie que l outil glost a bien ete compile
142check_glost_launch
143
144
[1849]145########  pour option -f #############
146while [ $# -gt 0 ]
147do
148   echo "boucle sur les arguments du script ..."
149   echo "@=$@"
150   case $1 in
151   -f)  restartExecFromZero=1
152        echo "force restart from the beginning ..."
153        ;;
[1885]154   -d)  deleteFiles=1
155        echo "force to delete input files ..."
156        ;;
[1870]157   -h|--help|-help)
158        echo "---------------------------------------------------"
159        echo "Usage: parallelPack.sh [-f]"
160        echo "Description:"
161        echo "   Launches the simultaneous treatments (ncrcat, tar, cap) of"
162        echo "   file lists contained in the IGCM_DEM directory."
163        echo "   In case of machine crash, this script handle restarts from the point"
164        echo "   the machine crashed."
165        echo
166        echo "Options:"
167        echo "   -h, --help, -help"
168        echo "        Print this manual"
169        echo "   -f"
170        echo "        Force to restart the treatments from the beginning"
[1885]171        echo "   -d"
172        echo "       force to delete input files ... "
[1870]173        echo "---------------------------------------------------"
174        exit
175        ;;
[1849]176   esac
177   shift
178done
[1912]179
180# copie du fichier launch_and_measureTime.sh sur ${TMP_MIGR_DATA}
181cp launch_and_measureTime.sh ${TMP_MIGR_DATA}/.
182
[1849]183export restartExecFromZero=${restartExecFromZero}
[1885]184export deleteFiles=${deleteFiles}
[1849]185######################################
186
[1853]187#########  On insert les directives batch en en-tete du script "launch_and_measureTime.sh"         ##########
188#########  lance plus loin. Seules les directives de nom du job et de sorties restent inchangees   ##########
189
190insertDirectives
191
192# exit 0 # gpdebug : a virer
193
194# export inputCmd="${USER_OUTPUT_PROGRESS}/inputCmd.list"
195# export nextInputCmd="${USER_OUTPUT_PROGRESS}/nextInputCmd.list"
196# export output="${USER_OUTPUT_PROGRESS}/packOutput.log"
197# export reportFile="${USER_OUTPUT_PROGRESS}/report.log"
198
199########## Si l'option -f est activee, on detruit tous les fichiers status  ##########
[1849]200if [ "x$restartExecFromZero" == "x1" ]
201then
202    echo "Deleting  all status files ..."
203    for CONFIG in $( awk '{print $1}' ${IGCM_DEM}/config_card.liste )
204    do
205       PATH_SIMU=$( dirname $CONFIG )
206       ListStatFileInSimu=`find $PATH_SIMU -type f -name "*status" `
207       if [ "x$ListStatFileInSimu" != "x" ]
208       then
209           for file in $ListStatFileInSimu
210           do
211              if [ -e $file ]
212              then
213                 rm -f $file
214              fi
215       
216           done     
217       fi   
218    done
219    echo "Deletion done."
220fi
[1853]221
222
223# Par ailleurs, on vide les fichiers de cmds, d'output et de rapport si option -f activee
224if [ "x${restartExecFromZero}" == "x1" ]
225then
226    rm -rf ${USER_OUTPUT_PROGRESS}/TRY__*
227fi
228
229# exit 0 # a virer
230
[1849]231#####################################################################################
232
[1900]233export JOB_DIR=${TMP_MIGR_DATA}
234export EXE_DIR=${LS_SUBCWD:-${PWD}}
[1849]235source ${EXE_DIR}/DEM_utilities.sh
236
237############## gpdebug : Pour gestion des erreurs #########################################
238# Execute la function errorReceive() si reception d'un signal TERM
239trap 'DEM_errorReceive' TERM
240# liste des processus à détruire en cas d'erreur bloquante
241export listPID=$$
242# fichier pour la transmission des messages d'erreur d'un fils au prog principal
[1900]243export errorMsgFile="${TMP_MIGR_DATA}/errorMsg.txt"
[1853]244############## gpdebug : fin ##############################################################
[1849]245
[1853]246check_nco_version # verification de la version de nco #######################
[1856]247check_libccc_user # verif que le module libccc_user est charge ##############
[1865]248check_cdo         # verif que le module cdo est charge ######################
[1853]249
[1866]250# exit 0 # a virer
[1865]251
[1853]252export badFailureFile=${USER_OUTPUT_PROGRESS}/badFailure.txt
253> $badFailureFile # nouvel essai, on vide le fichier d'erreur
254tryNumFile=${USER_OUTPUT_PROGRESS}/numero_current_try.txt
255numPreviousTry=$( getNumeroOfPreviousTry )
256# echo "numPreviousTry=$numPreviousTry"
257numNewTry=$(( $numPreviousTry + 1 ))
258
[1882]259
[1853]260# Pas de 4eme essai permis
261# ----------------------------
[1882]262if [ $numNewTry -ge 3 ]
[1853]263then
[1882]264    echo "Pas de 3eme essai permis"
[1853]265    exit 1
266fi
267
268# echo "numNewTry=$numNewTry"
269mkdir -p ${USER_OUTPUT_PROGRESS}/TRY__${numNewTry}
270echo $numNewTry > $tryNumFile
271
272# exit 0 # a virer
273
274
275
[1862]276export timeLaunchStartFile="${USER_OUTPUT_PROGRESS}/timeLaunchStartFile.txt"
277> $timeLaunchStartFile
[1849]278startTime=$( getDateMilliSeconds )
[1862]279echo "launch time:$startTime" > $timeLaunchStartFile
[1849]280
[1862]281export timeEndFile="${USER_OUTPUT_PROGRESS}/timeEndFile.txt"
282> $timeEndFile
283
[1849]284SCRIPT_NAME=$(basename ${0} )
285
286DEM_log -0 "Demarrage de ${SCRIPT_NAME}"
287
[1853]288# ccc_msub -A tgcc0013 launch_and_measureTime.sh
[1912]289ccc_msub ${TMP_MIGR_DATA}/launch_and_measureTime.sh
[1849]290
[1880]291tpsAvantRendreLaMain=15
[1849]292
[1853]293elapsedTime=0
[1880]294while [ $elapsedTime -lt $tpsAvantRendreLaMain ]
[1853]295do
296    sleep 5
297    elapsedTime=$(( $elapsedTime + 5 ))
298    isFailureFileEmpty=`cat $badFailureFile | wc -l `
299    if [ "x${isFailureFileEmpty}" != "x0" ]
300    then
301       sleep 2 # on attend que le fichier soit correctement rempli
302       cat $badFailureFile
303       exit 0
304    fi
305done
[1849]306
[1880]307if [ ${elapsedTime} -ge $tpsAvantRendreLaMain ]
[1863]308then
[1880]309    echo "Les $tpsAvantRendreLaMain sec sont ecoulees, les traitements continuent..."
[1863]310fi
[1853]311
312
[1880]313DEM_log -0 "Fin de ${SCRIPT_NAME}"
[1853]314
Note: See TracBrowser for help on using the repository browser.