- Timestamp:
- 2015-10-12T20:28:35+02:00 (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2015/dev_r5092_CNRS18_TRUST/NEMOGCM/TRUST/trusting_func.sh
r5701 r5788 3 3 4 4 ## Messenger filenames 5 FILE_DATE=mesg_01_date_$PATTERNAME.txt ; FILE_STAT=mesg_02_status_$PATTERNAME.txt 6 FILE_RESU=mesg_03_result_$PATTERNAME.txt ; FILE_NEMO=mesg_04_nemogcm_$PATTERNAME.txt 7 FILE_XIOS=mesg_05_xios_$PATTERNAME.txt ; FILE_COMP=mesg_06_compiler_$PATTERNAME.txt 8 FILE_MPIN=mesg_07_mpi_$PATTERNAME.txt ; FILE_NCDF=mesg_08_netcdf_$PATTERNAME.txt 9 FILE_INPT=mesg_09_inputs_$PATTERNAME.txt ; FILE_CPUT=mesg_10_cputime_$PATTERNAME.txt 10 FILE_COMM=mesg_11_comments_$PATTERNAME.txt; 11 12 ## Timestamped outcome & archive filenames 13 FILE_TRUS=trusting_${DATE}_$PATTERNAME.txt; FILE_ARCH=trusting_${DATE}_$PATTERNAME.tar.gz 14 15 16 print_step() { printf "\nStep.....\n$1\n"; } 17 5 FILE_DATE=mesg_01_date_$PATTERNAME.txt ; FILE_TRUS_RSLT=mesg_02_result_$PATTERNAME.txt 6 FILE_STAT=mesg_03_state_$PATTERNAME.txt ; FILE_NEMO=mesg_04_nemo_$PATTERNAME.txt 7 FILE_XIOS=mesg_05_xios_$PATTERNAME.txt ; FILE_CMPF=mesg_06_compiler_$PATTERNAME.txt 8 FILE_LMPI=mesg_07_mpi_$PATTERNAME.txt ; FILE_NCDF=mesg_08_netcdf_$PATTERNAME.txt 9 FILE_INPT=mesg_09_inputs_$PATTERNAME.txt; FILE_TIME=mesg_10_time_$PATTERNAME.txt 10 FILE_MEMY=mesg_11_memory_$PATTERNAME.txt; FILE_NOTE=mesg_12_comments_$PATTERNAME.txt 11 12 ## Timestamped logfile & archive filenames 13 FILE_TRUS=trusting_${DATE}_$PATTERNAME.txt; FILE_ARCH=trusting_${DATE}_$PATTERNAME.tgz 14 15 16 ## Functions in order of use 17 print_step() { 18 local char_nb=$( echo "$1" | wc -c ) 19 local outline=$( printf "%${char_nb}s" ) 20 21 printf "\nStep.....\n%s\n%s\n" "$1" ${outline// /-} 22 } 18 23 19 24 init_files() { 20 echo 'Date' > ${FILE_DATE}; echo 'Status' > ${FILE_STAT}21 echo ' Result' > ${FILE_RESU}; echo 'NEMOGCM rev.' >${FILE_NEMO}22 echo 'XIOS rev.' > ${FILE_XIOS}; echo 'Fortran compiler' > ${FILE_COMP}23 echo 'MPI libs' > ${FILE_MPIN}; echo 'NetCDF libs' >${FILE_NCDF}24 echo 'Input files' > ${FILE_INPT}; echo 'Real CPU time' > ${FILE_CPUT}25 echo ' Comments' > ${FILE_COMM}25 echo 'Date' > ${FILE_DATE}; echo 'Result' > ${FILE_TRUS_RSLT} 26 echo 'State' > ${FILE_STAT}; echo 'NEMOGCM rev.' > ${FILE_NEMO} 27 echo 'XIOS rev.' > ${FILE_XIOS}; echo 'Fortran compiler' > ${FILE_CMPF} 28 echo 'MPI libs' > ${FILE_LMPI}; echo 'NetCDF libs' > ${FILE_NCDF} 29 echo 'Input files' > ${FILE_INPT}; echo 'Elapsed time' > ${FILE_TIME} 30 echo 'Memory usage (P/V)' > ${FILE_MEMY}; echo 'Comments' > ${FILE_NOTE} 26 31 27 32 ## 'Failed' status with 'Unknown error' by default 28 echo $ST \ 33 echo $TRUS_RSLT \ 34 >> ${FILE_TRUS_RSLT} 35 echo 'Unknown error' \ 29 36 >> ${FILE_STAT} 30 echo 'Unknown error' \ 31 >> ${FILE_RESU} 32 } 33 37 } 34 38 35 39 get_date() { … … 37 41 local dat=$( date -ud "${DATE}" +"%F %R %Z" ) 38 42 39 echo $dat \43 echo $dat \ 40 44 >> ${FILE_DATE} 41 45 } 42 43 46 44 47 get_nemo_rev() { 45 48 local dir rev_loc 46 local rev=0 47 48 ## Loop on essential directories 49 for dir in ${NEMO_ARCH} ${NEMO_CONF} ${NEMO_ENGI} \ 50 ${NEMO_EAGR} ${NEMO_EIOI} ${NEMO_EFCM} \ 51 ${NEMO_TCMP} ${NEMO_TRBD} \ 52 ${DIR_XIOS} ; do 49 local rev=0 list=( 'ARCH CONFIG NEMO EXTERNAL/AGRIF EXTERNAL/IOIPSL EXTERNAL/fcm TOOLS/COMPILE TOOLS/REBUILD_NEMO' ) 50 51 ## Loop on essential NEMO directories 52 for dir in $list ${DIR_XIOS}; do 53 53 54 54 ## For time being, just get revision from XIOS with no action on directory … … 62 62 fi 63 63 64 echo $dir && ${SVN_CMD} $ dir65 rev_loc=$( svn info $ dir | awk '(NR == 9) {print $NF}' )64 echo $dir && ${SVN_CMD} ${TRUS_WKCY}/$dir 65 rev_loc=$( svn info ${TRUS_WKCY}/$dir | awk '(NR == 9) {print $NF}' ) 66 66 67 67 ## Keep last rev. nb … … 75 75 } 76 76 77 78 77 get_soft_rel() { 79 78 local soft soft_rel 80 79 81 for soft in $CDO $COMPILER $MPI $NETCDF; do 80 ## Sourcing environment modulefile only if module function is set 81 [[ -e ${ARCH_ENV} && $( declare -F | grep ' module' ) ]] && . ${ARCH_ENV} 82 83 for soft in $CMPF ${STR_CDOD} ${STR_LMPI} ${STR_NCDF}; do 82 84 soft_rel='' 83 85 84 ## Software strings to identify depends on use (sed is case-insensitive) 85 if [ $IMOD -eq 1 ]; then 86 ## Modules system: next word after "$soft/" 87 soft_rel=$( echo $LOADEDMODULES | sed "s#.*$soft/\([0-9.a-z_]*\).*#\1#i" ) 88 ## LOADEDMODULES=netcdf/mpi/4.1.3:cdo/1.5.9:intel/2013.0 89 ## LOADEDMODULES=bullxmpi/1.2.8.2:netcdf/4.3.3.1_hdf5_parallel:cdo/1.6.7 90 else 91 ## Hard-coded paths: next word after "$soft" 92 soft_rel=$( echo $PATH | sed "s#.*$soft\([0-9.a-z_]*\).*#\1#i" ) 93 ## PATH=/smplocal/intel/impi/4.1.0.024/intel64/bin:/smplocal/pub/cdo/1.5.9/bin:/smplocal/pub/NetCDF/4.1.3/mpi/bin 94 ## PATH=/usr/local/netcdf-4.3.3.1_hdf5_parallel/bin:/opt/mpi/bullxmpi/1.2.8.2/bin:/usr/local/netcdf-utils-4.3.3.1_hdf5/bin 95 fi 86 ## Software release: next word after "$soft" in $PATH (case-insensitive) 87 soft_rel=$( echo $PATH | sed "s#.*$soft\([0-9.a-z_]*\).*#\1#i" ) 96 88 97 89 ## option --version would work for main compilers (gfortran, intel, pgfortran, ...) … … 106 98 107 99 sed -n 4p model.log \ 108 >> ${FILE_C OMP}100 >> ${FILE_CMPF} 109 101 sed -n 5p model.log \ 110 >> ${FILE_ MPIN}102 >> ${FILE_LMPI} 111 103 sed -n 6p model.log \ 112 104 >> ${FILE_NCDF} 113 105 } 114 106 115 116 107 get_inputs() { 117 108 # List archive content & extract it by default 118 local cmd_iol="tar -tvf ${ NEMO_FORC}/${NEMO_TARF}" cmd_iof="tar -vxf ${NEMO_FORC}/${NEMO_TARF}"109 local cmd_iol="tar -tvf ${TRUS_FORC}/${TRUS_TARF}" cmd_iof="tar -vxf ${TRUS_FORC}/${TRUS_TARF}" 119 110 120 111 ## List & copy files in case of personal inputs 121 [ -z "${ NEMO_TARF}" ] && { cmd_iol="ls ${NEMO_FORC}/*"; cmd_iof="\cp ${NEMO_FORC}/* ."; }112 [ -z "${TRUS_TARF}" ] && { cmd_iol="ls ${TRUS_FORC}/*"; cmd_iof="\cp ${TRUS_FORC}/* ."; } 122 113 123 114 ${cmd_iol} > inputs_list.txt 124 115 ${cmd_iof} > /dev/null 125 116 } 126 127 117 128 118 diff_inputs() { … … 135 125 136 126 ## Continue even if input file is not in here (see after) 137 if [ -e ${ REFE_DIR}/$file ]; then dif=$( diff -q $file ${REFE_DIR}/$file ); else dif=0; fi127 if [ -e ${TRUS_BHMK}/$file ]; then dif=$( diff -q $file ${TRUS_BHMK}/$file ); else dif=0; fi 138 128 139 129 ## Pass over useless file omission in benckmark directory 140 if [[ -n "$dif" && "$dif" != '0' ]]; then 141 mesg='Different'; echo $dif; files_list+=$file' ' 142 fi 143 130 [[ -n "$dif" && "$dif" != '0' ]] && ( mesg='Different'; echo $dif; files_list+=$file' ' ) 144 131 done 145 132 146 133 [ $mesg == 'Same' ] && echo $mesg 147 echo $mesg \134 echo $mesg \ 148 135 >> ${FILE_INPT} 149 136 150 137 ## List different files for web comment 151 138 [ -n "${files_list}" ] && echo 'Inputs : '${files_list}'differ<br>' \ 152 >> temp_${FILE_COMM} 153 } 154 139 >> temp_${FILE_NOTE} 140 } 155 141 156 142 job_pending() { … … 160 146 161 147 ## Append a log file while pending 162 while [[ $( ${JOB_LIST} | grep ${JOB_ID} ) && ${time_elapsed} -lt ${TIME_LIMI}]]; do148 while [[ $( eval ${JOB_STAT} ) && ${time_elapsed} -lt $TIMEOUT ]]; do 163 149 printf "\n%s\n" ${outline// /#} \ 164 150 >> computation.log 165 ${JOB_INFO} ${JOB_ID}\151 eval ${JOB_INFO} \ 166 152 >> computation.log 167 153 sleep ${time_increment} … … 172 158 173 159 ## Kill remaining job & stop the test if it's too long 174 [ ${time_elapsed} -eq ${TIME_LIMI} ] && { ${JOB_DELE} ${JOB_ID} &> /dev/null; get_out 6; } 175 } 176 160 [ ${time_elapsed} -eq $TIMEOUT ] && { eval ${JOB_DELE} &> /dev/null; get_out 6; } 161 } 177 162 178 163 diff_results() { … … 182 167 ## Simple diff 183 168 for file in 'ocean.output' *.stat; do 184 185 169 ## Stop if no benchmark files (ocean.output, eventual stat files) 186 [ ! -e ${ REFE_DIR}/$file ] && { export ST='FAILED'; get_out 7; }187 188 diff -q $file ${ REFE_DIR}/$file170 [ ! -e ${TRUS_BHMK}/$file ] && { export TRUS_RSLT='FAILED'; get_out 7; } 171 172 diff -q $file ${TRUS_BHMK}/$file 189 173 190 174 ## Continue even if it differs 191 [ $? -ne 0 ] && { export ST='FAILED'; mesg='Different'; files_list+=$file' '; }175 [ $? -ne 0 ] && { export TRUS_RSLT='FAILED'; mesg='Different'; files_list+=$file' '; } 192 176 done 193 177 … … 196 180 ## List different files for web comment 197 181 [ -n "${files_list}" ] && echo 'Results : '${files_list}'differ<br>' \ 198 >> temp_${FILE_COMM} 199 } 200 182 >> temp_${FILE_NOTE} 183 } 201 184 202 185 diff_restart() { … … 205 188 206 189 ## Stop if no benchmark files (ie time.step) 207 [ ! -e ${ REFE_DIR}/time.step ] && { export ST='FAILED'; get_out 7; }208 time_step=$( cat ${ REFE_DIR}/time.step | tr -d [:space:] )190 [ ! -e ${TRUS_BHMK}/time.step ] && { export TRUS_RSLT='FAILED'; get_out 7; } 191 time_step=$( cat ${TRUS_BHMK}/time.step | tr -d [:space:] ) 209 192 210 193 ## Find all restart files to rebuild 211 194 if [ $( find -regex ".*_restart.*[0-9]\.nc" -print -quit ) ]; then 212 base_name=$( find -regex ".*_restart.*[0-9]\.nc" \213 | sed "s#^\./\(.*\)_[0-9]*_restart.*#\1#" | sort -u )214 list_comp=$( find -regex ".*_restart.*[0-9]\.nc" \215 | sed "s#^.*\(restart[a-z_]*\)_[0-9].*\.nc#\1#" | sort -u )216 list_tmsp=$( find -regex ".*_restart.*[0-9]\.nc" \217 | sed "s#^.*\([0-9]\{8\}\)_restart.*#\1#" | sort -u )195 base_name=$( find -regex ".*_restart.*[0-9]\.nc" \ 196 | sed "s#^\./\(.*\)_[0-9]*_restart.*#\1#" | sort -u ) 197 list_comp=$( find -regex ".*_restart.*[0-9]\.nc" \ 198 | sed "s#^.*\(restart[a-z_]*\)_[0-9].*\.nc#\1#" | sort -u ) 199 list_tmsp=$( find -regex ".*_restart.*[0-9]\.nc" \ 200 | sed "s#^.*\([0-9]\{8\}\)_restart.*#\1#" | sort -u ) 218 201 219 202 ## Loop on each time step 220 203 for tmsp in ${list_tmsp}; do 204 221 205 for comp in ${list_comp}; do 222 206 file=${base_name}_${tmsp}_${comp} … … 224 208 225 209 if [ ${nb_dom} -gt 1 ]; then 226 ${ NEMO_TRBD}/rebuild_nemo -t $NPROC$file ${nb_dom} > /dev/null227 [ $? -eq 0 ] && rm -f ${file}_[0-9]*.nc > /dev/null210 ${TRUS_WKCY}/TOOLS/REBUILD_NEMO/rebuild_nemo -t ${TRUS_NPRO} $file ${nb_dom} > /dev/null 211 [ $? -eq 0 ] && rm -f ${file}_[0-9]*.nc > /dev/null 228 212 elif [ ${nb_dom} -eq 0 ]; then 229 export ST='FAILED' && get_out 8213 export TRUS_RSLT='FAILED' && get_out 8 230 214 fi 231 215 … … 234 218 235 219 ## Stop if no benchmark files (restart file) 236 if [ -e ${ REFE_DIR}/$file.nc ]; then220 if [ -e ${TRUS_BHMK}/$file.nc ]; then 237 221 238 222 ## UNIX `cmp` not suitable (timestamp in .nc file) 239 dif=$( $CDOD $file.nc ${ REFE_DIR}/$file.nc 2> /dev/null \223 dif=$( $CDOD $file.nc ${TRUS_BHMK}/$file.nc 2> /dev/null \ 240 224 | awk '/records/ {print $0}' | sed '2 s/^/,/' | tr -d '\n' ) 241 225 242 226 ## CDO can return void stdout with no difference 243 227 if [[ -n "$dif" && $( echo $dif | awk '{print $1}' ) -ne 0 ]]; then 244 export ST='FAILED'245 files_list+=$comp' ' && let dif t+=$( echo $dif | awk '{print $1}' )228 export TRUS_RSLT='FAILED' 229 files_list+=$comp' ' && let dif_sum+=$( echo $dif | awk '{print $1}' ) 246 230 echo $file.nc': '$dif 247 231 fi 248 232 249 233 else 250 export ST='FAILED' && get_out 7234 export TRUS_RSLT='FAILED' && get_out 7 251 235 fi 252 236 … … 256 240 257 241 done 242 258 243 done 259 244 260 245 ## List different files for web comment with sum of different parameters 261 if [ $ dift-ne 0 ]; then262 echo 'Restarts: '${files_list}$ dift' record(s) differ<br>' \263 >> temp_${FILE_ COMM}246 if [ ${dif_sum} -ne 0 ]; then 247 echo 'Restarts: '${files_list}${dif_sum}' record(s) differ<br>' \ 248 >> temp_${FILE_NOTE} 264 249 else 265 250 echo 'Same' … … 267 252 268 253 else 269 export ST='FAILED' 270 fi 271 272 } 273 274 275 get_cpu_time() { 276 ## Interest for checking unusual time computing 277 local real_cpu_time=$( eval ${JOB_TIME} ) 278 279 echo ${real_cpu_time} | tee -a ${FILE_CPUT} 280 } 281 254 export TRUS_RSLT='FAILED' 255 fi 256 257 } 258 259 get_time() { 260 ## Interest for checking unusual time computation 261 local time_cpu=$( eval ${JOB_TIME} ) 262 263 printf "Elapsed time: " 264 echo ${time_cpu} | tee -a ${FILE_TIME} 265 } 266 267 get_memy() { 268 ## Interest for checking unusual memory usage 269 local memory_pmax=$( eval ${JOB_PMEM} ) memory_vmax=$( eval ${JOB_VMEM} ) 270 271 printf "Memory max usage (physical/virtual): " 272 echo ${memory_pmax}' / '${memory_vmax} | tee -a ${FILE_MEMY} 273 } 282 274 283 275 comments() { … … 286 278 287 279 if [ -e ocean.output ]; then 288 ## 'W A R N I N G' by default280 ## 'W A R N I N G' pattern by default 289 281 opat="-A2 \"^ $state\"" 290 282 [ "$state" == 'E R R O R' ] && opat="-A4 \"$state\"" … … 292 284 ## Select first occurence for web comment 293 285 line=$( eval grep -m1 $opat ocean.output | tr -d '\n' ) 294 echo $line 295 fi 296 297 printf "$line<br>" \ 298 >> temp_${FILE_COMM} 299 } 300 301 302 mesg_make() { 286 fi 287 288 [ -n "$line" ] && ( echo $line; printf "$line<br>" \ 289 >> temp_${FILE_NOTE} ) 290 } 291 292 log_make() { 303 293 ## Format comments for web 304 [ -e temp_${FILE_ COMM} ] && cat temp_${FILE_COMM} | tr -d '\n' | sed 's/<br>$//' \305 >> ${FILE_ COMM}306 307 ## Construct txt file for webwith all messenger files294 [ -e temp_${FILE_NOTE} ] && cat temp_${FILE_NOTE} | tr -d '\n' | sed 's/<br>$//' \ 295 >> ${FILE_NOTE} 296 297 ## Construct txt file with all messenger files 308 298 paste -d ';' mesg_*.txt | tee ${FILE_TRUS} 309 299 } 310 300 311 312 mesg_publish() { 301 prod_publish() { 313 302 local cmd 314 315 ## Production mode (-p|--publish) 316 if [ $PUBLISH -eq 1 ]; then 317 318 ## Create or append historical trusting file 319 if [ -f ${REFE_DIR}/trusting_$PATTERNAME.txt ]; then cmd='tail -1'; else cmd='cat'; fi 303 local rev=$( awk '/NEMOGCM/ {print $NF}' model.log ) 304 305 ## Production mode (-p|--prod) 306 if [ $PROD -eq 1 ]; then 307 308 ## Create or append trusting logfile 309 if [ -f ${TRUS_BHMK}/trusting_$PATTERNAME.txt ]; then cmd='tail -1'; else cmd='cat'; fi 320 310 321 311 $cmd ${FILE_TRUS} \ 322 >> ${ REFE_DIR}/trusting_$PATTERNAME.txt312 >> ${TRUS_BHMK}/trusting_$PATTERNAME.txt 323 313 324 314 ## Send mail only when FAILED 325 if [[ ! -z "$ EMAIL" && $ST == 'FAILED' ]]; then315 if [[ ! -z "$TRUS_MAIL" && $TRUS_RSLT == 'FAILED' ]]; then 326 316 327 317 ## Content 328 cat <<END_MAIL \318 cat <<END_MAIL \ 329 319 > trusting.mail 330 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 331 332 Dear $USER, 333 334 The trusting sequence for ${REFE_CONF} has failed. 335 Directory: ${TEST_DIR} 336 Archive created: ${FILE_ARCH} in ${REFE_DIR} 337 338 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 339 340 `cat ${TEST_DIR}/${FILE_TRUS}` 320 Dear all, 321 322 323 The trusting sequence has not completed successfully on new configuration ${TRUS_TEST} based on ${TRUS_REFE}. 324 325 Here is the model summary: 326 `cat model.log` 327 328 First checking would be on the trusting environment files: 329 ${TRUS_USER}.cfg & ${TRUS_HPCC}.cfg 330 331 For more details, look into the testing directory at: 332 ${TEST_DIR} 333 334 An archive has been created to share the questionable configuration for further studies: 335 ${TRUS_BHMK}/${FILE_ARCH} 336 341 337 END_MAIL 342 338 343 339 ## Send with detailed subject 344 mail -s "[NEMO Trusting ${NEMO_HPCC} ${REFE_CONF} ${NEMO_BRAN}] $ST $ERR" $EMAIL \340 mail -s "[NEMO Trusting][$rev][${TRUS_WKCY}][${TRUS_REFE}] $TRUS_RSLT $ERR" $TRUS_MAIL \ 345 341 < trusting.mail 346 342 fi … … 349 345 } 350 346 351 352 347 get_out() { 353 348 local time_step=0 … … 355 350 ERR=$1 356 351 357 print _step 'End of trusting test'352 printf "\n\nEnd of test\n" 358 353 359 354 ## In case of compilation error 360 355 cd ${TEST_DIR} 361 356 362 if [ $ ST == 'FAILED' ]; then357 if [ $TRUS_RSLT == 'FAILED' ]; then 363 358 echo 'Failure' 364 359 … … 369 364 ## Submission 370 365 '3') ERR='Missing input files' ;; '4') ERR='Job submission error' ;; 371 ## Running366 ## Computation 372 367 '5') ERR='Crashed at time step' ;; '6') ERR='Exceeded time limit' ;; 373 368 ## Results 374 369 '7') ERR='Missing previous outputs';; '8') ERR='New outputs differ' ;; 375 ## Undefined376 "*") ERR='Unknown error' ;;377 370 esac 378 371 … … 384 377 if [ "$ERR" == 'Crashed at time step' ]; then 385 378 comments 'E R R O R' 386 [ -e time.step ] && time_step=$( cat time.step | tr -d ' ')379 [ -e time.step ] && time_step=$( grep -o [0-9]* time.step ) 387 380 ERR+=' '$time_step 388 381 else 389 382 comments 'W A R N I N G' 390 [ "$ERR" == 'Exceeded time limit' ] && ERR+=' '$(( ${TIME _LIMIT}/3600 ))'h'383 [ "$ERR" == 'Exceeded time limit' ] && ERR+=' '$(( ${TIMEOUTT}/3600 ))'h' 391 384 fi 392 385 393 386 ## Last messenger files 394 387 export ERR 395 sed -i "2 s/.*/$ST/" ${FILE_STAT}; sed -i "2 s/.*/$ERR/" ${FILE_RESU} 396 397 ## Save tested configuration if trusting failed in production mode (-p|--publish) 398 if [[ $ST == 'FAILED' && $PUBLISH -eq 1 ]]; then 399 echo 'Creating archive '${FILE_ARCH}' under '${REFE_DIR} 400 tar -czf ${REFE_DIR}/${FILE_ARCH} * ${NEMO_HOME}/CONFIG/${TEST_CONF}/MY_SRC \ 401 ${NEMO_HOME}/CONFIG/${TEST_CONF}/WORK 402 fi 403 404 ## Share trusting result (.txt file/mail) 405 print_step 'Trusting digest' 406 mesg_make 407 mesg_publish 388 sed -i "2 s/.*/$TRUS_RSLT/" ${FILE_TRUS_RSLT}; sed -i "2 s/.*/$ERR/" ${FILE_STAT} 389 390 ## Save tested configuration if trusting failed in production mode (-p|--prod) 391 if [[ $TRUS_RSLT == 'FAILED' && $PROD -eq 1 ]]; then 392 echo 'Creating archive '${FILE_ARCH}' under '${TRUS_BHMK} 393 tar -czf ${TRUS_BHMK}/${FILE_ARCH} * \ 394 -C ${TRUS_WKCY}/CONFIG/${TRUS_TEST}/MY_SRC . \ 395 -C ${TRUS_WKCY}/CONFIG/${TRUS_TEST} cpp_${TRUS_TEST}.fcm 396 fi 397 398 ## Logfile construct & eventual sending of notification email 399 printf "\nTrusting digest:\n----------------\n" 400 log_make 401 prod_publish 408 402 409 403 exit 0
Note: See TracChangeset
for help on using the changeset viewer.