source: TOOLS/PACK_IPSL/process_list.sh @ 1871

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

meilleure gestion de la verification de la progression avant et apres l'exec d'une instance

  • Property svn:executable set to *
File size: 22.9 KB
Line 
1#!/bin/bash
2
3
4listToProcessFile="${1}"
5
6
7
8switchtotar=0 # gpdebug : a modifier --> s'occuper des options du script orig enlarge.sh
9maxtries=3
10
11# On renseigne les variables d'environnement
12. load_ipslPack_env.sh
13
14dirin=$INPUT_DMF_DATA
15dirout=$OUTPUT_STORE
16dirout_work=$OUTPUT_WORK
17
18export JOB_DIR=${LS_SUBCWD:-${PWD}}
19export EXE_DIR=${JOB_DIR}
20source ${EXE_DIR}/DEM_utilities.sh
21#------------------------------------------------------
22
23baseNameOfListFile=$( basename $listToProcessFile )
24dirPathOfListFile=$( dirname  $listToProcessFile )
25dirnameOfListFile=$( basename $dirPathOfListFile )
26
27echo "dirnameOfListFile ==> $dirnameOfListFile"
28
29
30if ( \
31     [ $dirnameOfListFile != "output_ncrcat" ] && \
32     [ $dirnameOfListFile != "output_tar" ]    && \
33     [ $dirnameOfListFile != "restart_tar" ]   && \
34     [ $dirnameOfListFile != "store_cp" ]      && \
35     [ $dirnameOfListFile != "work_cp" ]       && \
36     [ $dirnameOfListFile != "debug_tar" ]     && \
37     [ $dirnameOfListFile != "other_tar" ] \
38   ) \
39   && \
40   [ $baseNameOfListFile != "tar_full_simul.list" ]
41then
42        echo "probleme : le rep du fichier liste est mauvais." # gpdebug : a modifier
43        exit 1
44fi
45
46
47function find_varstoexclude {
48nbfile=0
49for file in `cat $1` ; do
50 #   ncdump -h ${file} | gawk '{if (match($0, /(byte|char|short|int|float|double) (.*)\(/, arr)) print arr[2] }' >> tmp_$$.txt
51    ncdump -h ${file} | grep -Ew "byte|char|short|int|float|double"  | awk -F\( '{split($1,a," ") ; split($2,b,")") ; if (a[2] != b[1]) print a[2]}'  >> tmp_$$.txt
52    let nbfile=nbfile+1
53done
54
55varstoexclude=`cat tmp_$$.txt | sort | uniq -c | awk -v nbfile=$nbfile '{if ($1 != nbfile) {print $2}}' | paste -s -d','`
56varstoexcludefiltered=`cat tmp_$$.txt | sort | uniq -c | awk -v nbfile=$nbfile '{if (($1 != nbfile) && !(match($2, /t_inst_(.*)/))) {print $2}}' | paste -s -d','`
57nbvars=`echo $varstoexcludefiltered | gawk -F',' '{print NF}'`
58
59rm -f tmp_$$.txt
60
61return 0
62}
63
64# gpdebug : pour test showPackProgress.sh *************************
65export RANDOM=$$
66
67function gives_0_or_1
68{
69   bit=-1
70   let "bit = RANDOM % 2"
71   echo $bit
72}
73
74resultCmd=
75# gpdebug : ****************************** fin ********************
76
77
78
79
80# rep de simu : celui contenant le rep qui contient la liste
81PATH_SIMU=$( dirname  $dirPathOfListFile )
82set=$listToProcessFile
83
84
85if [ "$dirnameOfListFile" == "output_ncrcat" ]
86then
87        #-----------------------------------
88        echo "#-------------------"
89        echo "Set: $set"
90        datestr=`LC_ALL=C date +"%Y%m%dT%H%M%S"`
91        datestr1=`LC_ALL=C date +"%Y-%m-%dT%H:%M:%S"`
92        statusfile=${set%%.list}.status
93        logfile=${set%%.list}_${datestr}.log
94       
95        # echo "output_ncrcat : blabla 0"
96       
97        #-----------------------------------
98        # Create status file if not exists
99        if [ ! -e $statusfile ] ; then
100                echo "# Status ; DateStart ; DateEnd ; Command ; TarFileExists" > $statusfile
101        fi
102       
103        # Switch to tar command
104        if [ $switchtotar -eq 1 ] ; then
105                echo "====> DELEGATE to tar command with option --switchtotar"
106                echo "DELEGATE to tar command with option --switchtotar" >> $statusfile
107                mkdir -p $PATH_SIMU/output_tar
108                mv $set $PATH_SIMU/output_tar
109                exit 5
110        fi
111       
112        # # Skip the set if last line of the status file is "DELEGATE"
113        # if tail -1 $statusfile | grep -q -E 'DELEGATE' ; then
114        #       printf "====> "
115        #       tail -1 $statusfile
116        #       exit 50
117        # fi
118       
119        # Skip the set if last line of the status file is "COMPLETED"
120        if tail -1 $statusfile | grep -q -E '(COMPLETED|DELEGATE)' ; then
121                printf "====> "
122                tail -1 $statusfile
123                exit 0
124        fi     
125
126        #-----------------------------------
127        # nbtries = number of lines from status file (first comment line gives 1 for the first try)
128        nbtries=`wc -l $statusfile | cut -d' ' -f1`             
129        echo "Nb of tries: $nbtries"
130
131        #-----------------------------------
132        # Set output file name from list name
133
134        fileout1=$( basename $set )
135        fileout=${fileout1%.list}
136
137        filefirst=`head -n 1 $set`
138        diroutputfile=`dirname $filefirst | sed -e "s%$dirin%$dirout%"`
139
140        outputfile=$diroutputfile/${fileout}
141        mkdir -p $diroutputfile
142        echo "Output file to write: $outputfile  output_ncrcat"
143
144        #-----------------------------------
145        # Find variables to exclude to have homogeneous files (always exclude 't_inst_.*')
146        extratar=0
147        find_varstoexclude $set
148        if [ $nbvars -eq 0 ] ; then
149                varstoexclude="t_inst_.*"
150        else
151                # There are others variables than 't_inst_.*' so an extra tar file will be created
152                varstoexclude="t_inst_.*,$varstoexcludefiltered"
153                extratar=1
154                # Copy to output_tar directory
155                echo "====> COPY to tar command because find other variables ($varstoexcludefiltered) than t_inst_*"
156#               echo "COPY to tar command because find other variables ($varstoexcludefiltered) than t_inst_*" >> $statusfile
157                mkdir -p $PATH_SIMU/output_tar
158                cp $set $PATH_SIMU/output_tar
159               
160        fi
161
162        #-----------------------------------
163        # Try 2 times before fire "FAILED"
164        ncrcatcmd=ncrcat
165        ncrcatoptions="--md5_digest"
166#       ncrcatoptions=""
167
168        startTime=$( getDateMilliSeconds ) # gpdebug : time
169        resCmd=0
170        cat $set | $ncrcatcmd $ncrcatoptions -O -x -v $varstoexclude -o $outputfile > $logfile 2>&1 # gpdebug : a retablir
171        resCmd=$?
172        meantime=$( getTimeDiffSeconds $startTime ) # gpdebug : time
173       
174        # resultCmd=$( gives_0_or_1 )
175        # resultCmd=1
176        # if [ $resultCmd -eq 0 ] ; then
177        if [ $resCmd -eq 0 ] ; then
178                sed -i "1i\meantime:${meantime}" $statusfile # gpdebug : time
179                datestr2=`LC_ALL=C date +"%Y-%m-%dT%H:%M:%S"`
180                echo "DONE ; $datestr1 ; $datestr2 ; cat $set | $ncrcatcmd $ncrcatoptions -O -x -v '$varstoexclude' -o $outputfile ; $logfile ; $extratar" >> $statusfile
181                echo "====> COMPLETED at try #$nbtries (at 1st shot on 2)"
182                echo "COMPLETED at try #$nbtries (at 1st shot on 2)" >> $statusfile
183                # exit 10 : il faut tarer cette liste dans "output_tar" et tenter de la concatener a nouveau
184                        # exit 5 : seulement la tarer dans "output_tar"
185                if [ "x${extratar}" == "x1" ]
186                then
187                    exit 10
188                fi
189        else
190                # Add --md5_digest
191                rm -f $outputfile*ncrcat.tmp
192                startTime=$( getDateMilliSeconds ) # gpdebug : time
193                resCmd=0
194                cat $set | $ncrcatcmd $ncrcatoptions -O -x -v $varstoexclude -o $outputfile > $logfile 2>&1 # gpdebug : a retablir
195                resCmd=$?
196                meantime=$( getTimeDiffSeconds $startTime ) # gpdebug : time
197                # resultCmd=$( gives_0_or_1 )
198                # resultCmd=1
199                # if [ $resultCmd -eq 0 ] ; then
200                if [ $resCmd -eq 0 ] ; then
201                        sed -i "1i\meantime:${meantime}" $statusfile # gpdebug : time
202                        datestr2=`LC_ALL=C date +"%Y-%m-%dT%H:%M:%S"`
203                        echo "DONE ; $datestr1 ; $datestr2 ; cat $set | $ncrcatcmd $ncrcatoptions -O -x -v '$varstoexclude' -o $outputfile ; $logfile ; $extratar" >> $statusfile
204                        echo "====> COMPLETED at try #$nbtries (at 2nd shot on 2)"
205                        echo "COMPLETED at try #$nbtries (at 2nd shot on 2)" >> $statusfile
206                        if [ "x${extratar}" == "x1" ]
207                        then
208                            exit 10
209                        fi
210                else
211                        datestr2=`LC_ALL=C date +"%Y-%m-%dT%H:%M:%S"`
212                        rm -f $outputfile*ncrcat.tmp
213                        echo "====> FAILED at try #$nbtries" 
214                        echo "FAILED at try #$nbtries ; $datestr1 ; $datestr2 ; cat $set | $ncrcatcmd $ncrcatoptions -O -x -v '$varstoexclude' -o $outputfile ; $logfile ; $extratar" >> $statusfile
215                        if [ $nbtries -ge $maxtries ] ; then
216                                echo "====> DELEGATE to tar command after $nbtries tries (maxtries=$maxtries)"
217                                echo "DELEGATE to tar command after $nbtries tries (maxtries=$maxtries)" >> $statusfile
218                                mkdir -p $PATH_SIMU/output_tar
219                                cp $set $PATH_SIMU/output_tar # gpdebug : a retablir
220                                exit 10
221                        fi
222                       
223                        # exit 10 : il faut tarer cette liste dans "output_tar" et tenter de la concatener a nouveau
224                        # exit 5 : seulement la tarer dans "output_tar"
225                        if [ "x${extratar}" == "x1" ]
226                        then
227                            exit 10
228                        else
229                            exit 1
230                        fi
231                fi
232        fi
233
234
235
236fi
237
238
239#------------------------------------------------------
240if [ "$dirnameOfListFile" == "output_tar" ]
241then
242
243        #-----------------------------------
244        echo "#-------------------"
245        echo "Set: $set"
246        datestr=`LC_ALL=C date +"%Y%m%dT%H%M%S"`
247        datestr1=`LC_ALL=C date +"%Y-%m-%dT%H:%M:%S"`
248        statusfile=${set%%.list}.status
249        logfile=${set%%.list}_${datestr}.log
250
251        #-----------------------------------
252        # Create status file if not exists
253        if [ ! -e $statusfile ] ; then
254                echo "# Status ; DateStart ; DateEnd ; Command ; TarFileExists" > $statusfile
255        fi
256
257        #-----------------------------------
258        # Skip the set if last line of the status file is "COMPLETED" or "DELEGATE"
259        if tail -1 $statusfile | grep -q -E '(COMPLETED|DELEGATE)' ; then
260                printf "====> "
261                tail -1 $statusfile
262                exit 0
263        fi
264
265        #-----------------------------------
266        # nbtries = number of lines from status file (first comment line gives 1 for the first try)
267        nbtries=`wc -l $statusfile | cut -d' ' -f1`             
268        # echo "Nb of tries: $nbtries"
269
270        #-----------------------------------
271        # Set output file name from list name
272
273        fileout1=$( basename $set )
274        fileout=${fileout1%.list}.tar
275       
276        filefirst=`head -n 1 $set`
277        dirinputfile=`dirname $filefirst`
278        diroutputfile=`dirname $filefirst | sed -e "s%$dirin%$dirout%"` 
279
280        outputfile=$diroutputfile/${fileout}
281        mkdir -p $diroutputfile
282        echo "Output file to write: $outputfile  output_tar"
283
284        #-----------------------------------
285        # Try 1 time before fire "FAILED"
286        # Waiting for CCRT command
287        tarcmd=tar
288        taroptions="--format=posix -W -cf"
289       
290        cd $dirinputfile
291
292        set_local=$set".local"
293        for file in $( cat $set) ; do
294            basename $file >> $set".local" 
295        done
296           
297#       #-----------------------------------
298        startTime=$( getDateMilliSeconds ) # gpdebug : time
299        resCmd=0
300        $tarcmd $taroptions $outputfile --dereference --files-from $set.local > $logfile 2>&1 # gpdebug : a retablir
301        resCmd=$?
302        meantime=$( getTimeDiffSeconds $startTime ) # gpdebug : time
303       
304        # resultCmd=$( gives_0_or_1 )
305        # if [ $resultCmd -eq 0 ] ; then
306        if [ $resCmd -eq 0 ] ; then
307            sed -i "1i\meantime:${meantime}" $statusfile # gpdebug : time
308            datestr2=`LC_ALL=C date +"%Y-%m-%dT%H:%M:%S"`
309            echo "DONE ; $datestr1 ; $datestr2 ; $tarcmd $taroptions $outputfile $(cat $set); $logfile" >> $statusfile
310            echo "====> COMPLETED at try #$nbtries (at 1st shot on 1)"
311            echo "COMPLETED at try #$nbtries (at 1st shot on 1)" >> $statusfile
312        else
313            datestr2=`LC_ALL=C date +"%Y-%m-%dT%H:%M:%S"`
314            echo "====> FAILED at try #$nbtries" 
315            echo "FAILED at try #$nbtries ; $datestr1 ; $datestr2 ; $tarcmd $taroptions $outputfile $(cat $set) ; $logfile" >> $statusfile
316            exit 1
317        fi
318        rm -f $set".local" 
319        #-----------------------------------
320       
321fi
322
323
324#------------------------------------------------------
325if [ "$dirnameOfListFile" == "restart_tar" ]
326then
327        #-----------------------------------
328        echo "#-------------------"
329        echo "Set: $set"
330        datestr=`LC_ALL=C date +"%Y%m%dT%H%M%S"`
331        datestr1=`LC_ALL=C date +"%Y-%m-%dT%H:%M:%S"`
332        statusfile=${set%%.list}.status
333        logfile=${set%%.list}_${datestr}.log
334
335        #-----------------------------------
336        # Create status file if not exists
337        if [ ! -e $statusfile ] ; then
338                echo "# Status ; DateStart ; DateEnd ; Command ; TarFileExists" > $statusfile
339        fi
340
341        #-----------------------------------
342        # Skip the set if last line of the status file is "COMPLETED" or "DELEGATE"
343        if tail -1 $statusfile | grep -q -E '(COMPLETED|DELEGATE)' ; then
344                printf "====> "
345                tail -1 $statusfile
346                exit 0
347        fi
348
349        #-----------------------------------
350        # nbtries = number of lines from status file (first comment line gives 1 for the first try)
351        nbtries=`wc -l $statusfile | cut -d' ' -f1`             
352        # echo "Nb of tries: $nbtries"
353
354        #-----------------------------------
355        # Set output file name from list name
356        dirin1=$PATH_SIMU/RESTART
357        dirin2=${dirin1##${IGCM_DEM}}
358        dirin3=${dirin2##/$( basename ${INPUT_DMF_DATA} )}
359        diroutputfile=${OUTPUT_STORE}${dirin3}
360        fileout1=$( basename $set )
361        fileout=${fileout1%.list}.tar
362        outputfile=$diroutputfile/${fileout}
363        mkdir -p $diroutputfile
364        echo "Output file to write: $outputfile  restart_tar"
365
366        #-----------------------------------
367        # Try 1 time before fire "FAILED"
368        # Waiting for CCRT command
369        tarcmd=tar
370        taroptions="--format=posix -W -cf"
371       
372        cd $dirin1
373#       ls
374       
375        startTime=$( getDateMilliSeconds ) # gpdebug : time
376        resCmd=0
377        $tarcmd $taroptions $outputfile --dereference --files-from $set > $logfile 2>&1 # gpdebug : a retablir
378        resCmd=$?
379        meantime=$( getTimeDiffSeconds $startTime ) # gpdebug : time
380       
381        # resultCmd=$( gives_0_or_1 )
382        # if [ $resultCmd -eq 0 ] ; then
383        if [ $resCmd -eq 0 ] ; then
384            sed -i "1i\meantime:${meantime}" $statusfile # gpdebug : time
385            datestr2=`LC_ALL=C date +"%Y-%m-%dT%H:%M:%S"`
386            echo "DONE ; $datestr1 ; $datestr2 ; $tarcmd $taroptions $outputfile $(cat $set); $logfile" >> $statusfile
387            echo "====> COMPLETED at try #$nbtries (at 1st shot on 1)"
388            echo "COMPLETED at try #$nbtries (at 1st shot on 1)" >> $statusfile
389        else
390            datestr2=`LC_ALL=C date +"%Y-%m-%dT%H:%M:%S"`
391            echo "====> FAILED at try #$nbtries" 
392            echo "FAILED at try #$nbtries ; $datestr1 ; $datestr2 ; $tarcmd $taroptions $outputfile $(cat $set) ; $logfile" >> $statusfile
393            exit 1
394        fi
395       
396        #-----------------------------------
397       
398fi     
399
400#------------------------------------------------------
401if [ "$dirnameOfListFile" == "debug_tar" ]
402then
403
404        #-----------------------------------
405        echo "#-------------------"
406        echo "Set: $set"
407        datestr=`LC_ALL=C date +"%Y%m%dT%H%M%S"`
408        datestr1=`LC_ALL=C date +"%Y-%m-%dT%H:%M:%S"`
409        statusfile=${set%%.list}.status
410        logfile=${set%%.list}_${datestr}.log
411
412        #-----------------------------------
413        # Create status file if not exists
414        if [ ! -e $statusfile ] ; then
415                echo "# Status ; DateStart ; DateEnd ; Command ; TarFileExists" > $statusfile
416        fi
417
418        #-----------------------------------
419        # Skip the set if last line of the status file is "COMPLETED" or "DELEGATE"
420        if tail -1 $statusfile | grep -q -E '(COMPLETED|DELEGATE)' ; then
421                printf "====> "
422                tail -1 $statusfile
423                exit 0
424        fi
425
426        #-----------------------------------
427        # nbtries = number of lines from status file (first comment line gives 1 for the first try)
428        nbtries=`wc -l $statusfile | cut -d' ' -f1`             
429        # echo "Nb of tries: $nbtries"
430
431        #-----------------------------------
432        # Set output file name from list name
433        dirin1=$PATH_SIMU/DEBUG
434        dirin2=${dirin1##${IGCM_DEM}}
435        dirin3=${dirin2##/$( basename ${INPUT_DMF_DATA} )}
436        diroutputfile=${OUTPUT_STORE}${dirin3}
437        fileout1=$( basename $set )
438        fileout=${fileout1%.list}.tar
439        outputfile=$diroutputfile/${fileout}
440        mkdir -p $diroutputfile
441        echo "Output file to write: $outputfile  debug_tar"
442
443        #-----------------------------------
444        # Try 1 time before fire "FAILED"
445        # Waiting for CCRT command
446        tarcmd=tar
447        taroptions="--format=posix -W -cf"
448       
449        cd $dirin1
450#       ls
451        resCmd=0
452        startTime=$( getDateMilliSeconds ) # gpdebug : time
453        $tarcmd $taroptions $outputfile --dereference --files-from $set > $logfile 2>&1 # gpdebug : a retablir
454        resCmd=$?
455        meantime=$( getTimeDiffSeconds $startTime ) # gpdebug : time
456       
457        # resultCmd=$( gives_0_or_1 )
458        # if [ $resultCmd -eq 0 ] ; then
459        if [ $resCmd -eq 0 ] ; then
460            sed -i "1i\meantime:${meantime}" $statusfile # gpdebug : time
461            datestr2=`LC_ALL=C date +"%Y-%m-%dT%H:%M:%S"`
462            echo "DONE ; $datestr1 ; $datestr2 ; $tarcmd $taroptions $outputfile $(cat $set); $logfile" >> $statusfile
463            echo "====> COMPLETED at try #$nbtries (at 1st shot on 1)"
464            echo "COMPLETED at try #$nbtries (at 1st shot on 1)" >> $statusfile
465        else
466            datestr2=`LC_ALL=C date +"%Y-%m-%dT%H:%M:%S"`
467            echo "====> FAILED at try #$nbtries" 
468            echo "FAILED at try #$nbtries ; $datestr1 ; $datestr2 ; $tarcmd $taroptions $outputfile $(cat $set) ; $logfile" >> $statusfile
469            exit 1
470        fi
471       
472        #-----------------------------------
473       
474fi
475
476#------------------------------------------------------
477if [ "$dirnameOfListFile" == "store_cp" ]
478then
479        #-----------------------------------
480        echo "#-------------------"
481        echo "Set: $set"
482        datestr=`LC_ALL=C date +"%Y%m%dT%H%M%S"`
483        datestr1=`LC_ALL=C date +"%Y-%m-%dT%H:%M:%S"`
484        statusfile=${set%%.list}.status
485        logfile=${set%%.list}_${datestr}.log
486
487        #-----------------------------------
488        # Create status file if not exists
489        if [ ! -e $statusfile ] ; then
490                echo "# Status ; DateStart ; DateEnd ; Command ; TarFileExists" > $statusfile
491        fi
492
493        #-----------------------------------
494        # Skip the set if last line of the status file is "COMPLETED" or "DELEGATE"
495        if tail -1 $statusfile | grep -q -E '(COMPLETED|DELEGATE)' ; then
496                printf "====> "
497                tail -1 $statusfile
498                exit 0
499        fi
500
501        #-----------------------------------
502        # nbtries = number of lines from status file (first comment line gives 1 for the first try)
503        nbtries=`wc -l $statusfile | cut -d' ' -f1`             
504        # echo "Nb of tries: $nbtries"
505
506        meantime=0
507        resCmd=0
508        startTime=$( getDateMilliSeconds ) # gpdebug : time
509        #-----------------------------------
510        # Set output file name from first and last files from the current set
511        for file in $( cat $set) ; do
512         
513            diroutputfile=`dirname $file | sed -e "s%$dirin%$dirout%"`
514            mkdir -p $diroutputfile
515            echo "Output file to write: $diroutputfile/$( basename $file )  store_cp"
516           
517        #-----------------------------------
518        # Try 1 time before fire "FAILED"
519        # Waiting for CCRT command
520            cpcmd="cp "
521            cpoptions="-rf"
522            $cpcmd $cpoptions $file $diroutputfile > $logfile 2>&1 # gpdebug : a retablir
523            resCmd=$(( $resCmd || $? ))
524        done
525        meantime=$( getTimeDiffSeconds $startTime ) # gpdebug : time
526       
527        # resultCmd=$( gives_0_or_1 )
528        # if [ $resultCmd -eq 0 ] ; then
529        if [ $resCmd -eq 0 ] ; then
530            sed -i "1i\meantime:${meantime}" $statusfile # gpdebug : time
531            datestr2=`LC_ALL=C date +"%Y-%m-%dT%H:%M:%S"`
532            echo "DONE ; $datestr1 ; $datestr2 ; $cpcmd $cpoptions $file $diroutputfile ; $logfile" >> $statusfile
533            echo "====> COMPLETED at try #$nbtries (at 1st shot on 1)"
534            echo "COMPLETED at try #$nbtries (at 1st shot on 1)" >> $statusfile
535        else
536            datestr2=`LC_ALL=C date +"%Y-%m-%dT%H:%M:%S"`
537            echo "====> FAILED at try #$nbtries" 
538            echo "FAILED at try #$nbtries ; $datestr1 ; $datestr2 ; $cpcmd $cpoptions $file $diroutputfile ; $logfile" >> $statusfile
539            exit 1
540        fi
541       
542        #-----------------------------------
543       
544fi     
545
546#------------------------------------------------------
547if [ "$dirnameOfListFile" == "work_cp" ]
548then
549        #-----------------------------------
550        echo "#-------------------"
551        echo "Set: $set"
552        datestr=`LC_ALL=C date +"%Y%m%dT%H%M%S"`
553        datestr1=`LC_ALL=C date +"%Y-%m-%dT%H:%M:%S"`
554        statusfile=${set%%.list}.status
555        logfile=${set%%.list}_${datestr}.log
556
557        #-----------------------------------
558        # Create status file if not exists
559        if [ ! -e $statusfile ] ; then
560                echo "# Status ; DateStart ; DateEnd ; Command ; TarFileExists" > $statusfile
561        fi
562
563        #-----------------------------------
564        # Skip the set if last line of the status file is "COMPLETED" or "DELEGATE"
565        if tail -1 $statusfile | grep -q -E '(COMPLETED|DELEGATE)' ; then
566                printf "====> "
567                tail -1 $statusfile
568                exit 0
569        fi
570
571        #-----------------------------------
572        # nbtries = number of lines from status file (first comment line gives 1 for the first try)
573        nbtries=`wc -l $statusfile | cut -d' ' -f1`             
574        # echo "Nb of tries: $nbtries"
575
576        meantime=0
577        resCmd=0
578        startTime=$( getDateMilliSeconds ) # gpdebug : time
579        #-----------------------------------
580        # Set output file name from first and last files from the current set
581        for file in $( cat $set) ; do
582         
583            diroutputfile=`dirname $file | sed -e "s%$dirin%$dirout_work%"`
584            mkdir -p $diroutputfile
585            echo "Output file to write: $diroutputfile/$( basename $file )  work_cp"
586           
587        #-----------------------------------
588        # Try 1 time before fire "FAILED"
589        # Waiting for CCRT command
590            cpcmd="cp "
591            cpoptions="-rf"
592            $cpcmd $cpoptions $file $diroutputfile > $logfile 2>&1  # gpdebug : a retablir
593            resCmd=$(( $resCmd || $? ))   
594        done
595        meantime=$( getTimeDiffSeconds $startTime ) # gpdebug : timeS
596        # resultCmd=$( gives_0_or_1 )
597        # if [ $resultCmd -eq 0 ] ; then
598        if [ $resCmd -eq 0 ] ; then
599            sed -i "1i\meantime:${meantime}" $statusfile # gpdebug : time
600            datestr2=`LC_ALL=C date +"%Y-%m-%dT%H:%M:%S"`
601            echo "DONE ; $datestr1 ; $datestr2 ; $cpcmd $cpoptions $file $diroutputfile ; $logfile" >> $statusfile
602            echo "====> COMPLETED at try #$nbtries (at 1st shot on 1)"
603            echo "COMPLETED at try #$nbtries (at 1st shot on 1)" >> $statusfile
604        else
605            datestr2=`LC_ALL=C date +"%Y-%m-%dT%H:%M:%S"`
606            echo "====> FAILED at try #$nbtries" 
607            echo "FAILED at try #$nbtries ; $datestr1 ; $datestr2 ; $cpcmd $cpoptions $file $diroutputfile ; $logfile" >> $statusfile
608            exit 1
609        fi
610       
611        #-----------------------------------
612       
613fi
614
615# gpdebug : traitement des simu < 1 Go ou de type create_etat0
616#           il n'est censé n'y avoir qu'un seul fichier tar_full_simul.list par simu.
617#           d'ou le "if" et non le "for"
618# pense bete :
619#    * implication dans showPackProgress.sh (fichier status) ?
620if [ "$baseNameOfListFile" == "tar_full_simul.list" ]
621then
622        # set="${PATH_SIMU}/tar_full_simul.list" # gpdebug : foireux ?
623        #-----------------------------------
624        echo "#-------------------"
625        echo "Set: $set"
626        datestr=`LC_ALL=C date +"%Y%m%dT%H%M%S"`
627        datestr1=`LC_ALL=C date +"%Y-%m-%dT%H:%M:%S"`
628        statusfile=${set%%.list}.status
629        logfile=${set%%.list}_${datestr}.log
630
631        #-----------------------------------
632        # Create status file if not exists
633        if [ ! -e $statusfile ] ; then
634                echo "# Status ; DateStart ; DateEnd ; Command ; TarFileExists" > $statusfile
635        fi
636
637        #-----------------------------------
638        # Skip the set if last line of the status file is "COMPLETED" or "DELEGATE"
639        if tail -1 $statusfile | grep -q -E '(COMPLETED|DELEGATE)' ; then
640                printf "====> "
641                tail -1 $statusfile
642                exit 0
643        fi
644
645        #-----------------------------------
646        # Set output file name from list name
647        # echo "PATH_SIMU=$PATH_SIMU"
648        dirOfOutputFile=`echo $PATH_SIMU | sed "s;${IGCM_DEM};${OUTPUT_STORE};" `
649        fileout=${dirnameOfListFile}.tar
650        # echo "dirnameOfListFile=$dirnameOfListFile"
651        outputfile=$dirOfOutputFile/${fileout}
652        mkdir -p $dirOfOutputFile
653        echo "Output file to write: $outputfile  tar_full_simul"
654       
655        # exit 0 # a virer
656
657        #-----------------------------------
658        # Try 1 time before fire "FAILED"
659        # Waiting for CCRT command
660        tarcmd=tar
661        taroptions="--format=posix -W -cf"
662#       taroptions="--format=posix -cf"
663
664        filefirst=`head -n 1 $set`
665        dirinputfile=`dirname $filefirst`
666        cd $dirinputfile
667
668        set_local=${set%%.list}.local
669        > $set_local
670        for file in $( cat $set) ; do
671            basename $file >> $set_local 
672        done
673#       ls
674       
675        startTime=$( getDateMilliSeconds ) # gpdebug : time
676        resCmd=0
677        $tarcmd $taroptions $outputfile --dereference --files-from $set_local > $logfile 2>&1 # gpdebug : a retablir
678        resCmd=$?
679        meantime=$( getTimeDiffSeconds $startTime ) # gpdebug : time
680       
681        # resultCmd=$( gives_0_or_1 )
682        # if [ $resultCmd -eq 0 ] ; then
683        if [ $resCmd -eq 0 ] ; then
684            sed -i "1i\meantime:${meantime}" $statusfile # gpdebug : time
685            datestr2=`LC_ALL=C date +"%Y-%m-%dT%H:%M:%S"`
686            echo "DONE ; $datestr1 ; $datestr2 ; $tarcmd $taroptions $outputfile $(cat $set); $logfile" >> $statusfile
687            echo "====> COMPLETED at try #$nbtries (at 1st shot on 1)"
688            echo "COMPLETED at try #$nbtries (at 1st shot on 1)" >> $statusfile
689        else
690            datestr2=`LC_ALL=C date +"%Y-%m-%dT%H:%M:%S"`
691            echo "====> FAILED at try #$nbtries" 
692            echo "FAILED at try #$nbtries ; $datestr1 ; $datestr2 ; $tarcmd $taroptions $outputfile $(cat $set) ; $logfile" >> $statusfile
693            exit 1
694        fi
695       
696        #-----------------------------------
697fi
698
699
700
701
702
703
704
705
706
707
708
Note: See TracBrowser for help on using the repository browser.