Guest User

Untitled

a guest
Jun 18th, 2018
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.12 KB | None | 0 0
  1. #!/bin/bash
  2. # Este script permite lanzar trabajos de calculo en la cola de abaqus
  3. #
  4. # Fede Diaz (nordri at gmail dot com)
  5. # Jul 30 2008
  6.  
  7. # Leera la linea de comando y seleccionara los parametros
  8. function parametro() {
  9. echo $1 | awk -F"=" '{ print $1 " " $2 }'
  10. }
  11.  
  12. # Escribira el script para lanzar el calculo y lo programara para
  13. # cuando el ultimo activo tenga que terminar.
  14. function doCalcScript () {
  15. BINDIR="/home/clabaqus/bin/abaqus";
  16. echo -e "#!/bin/bash \n " \
  17. "PATH=\"/usr/bin:/bin:/usr/local/bin\" \n" \
  18. "cd $1 && abaqus input=$2 job=$3 cpus=$4" > $BINDIR/S$3.sh;
  19.  
  20. chmod u+x $BINDIR/S$3.sh;
  21. at $LASTJOBTIMEHUMAN -f $BINDIR/S$3.sh 2>&1
  22. }
  23.  
  24. # Escribira el script para terminar el calculo, antes verificara que no
  25. # este activo, si lo esta enviara la señal de terminate.
  26. function doCalcKillScript () {
  27. BINDIR="/home/clabaqus/bin/abaqus"
  28. PROC=$(pgrep Python.exe)
  29.  
  30. SEEKANDDESTROY="if [ $PROC ]; then cd $1 && abaqus terminate job=$2;fi \n";
  31. SENDCALCREPORT="cd $1 && cat $2.log | email -s \"[ABAQUS] Resultado del calculo\" $3";
  32.  
  33. echo -e "#!/bin/bash \n " \
  34. "PATH=\"/usr/bin:/bin:/usr/local/bin\" \n " \
  35. "$SEEKANDDESTROY $SENDCALCREPORT" > $BINDIR/K$2.sh;
  36.  
  37. chmod u+x $BINDIR/K$2.sh;
  38. at $NEXTJOBTIMEDESTROY -f $BINDIR/K$2.sh 2>&1
  39. }
  40.  
  41. # Variables globales:
  42. # WD Directorio de trabajo donde se invoca al script
  43. # LASTJOBFILE Fichero donde apuntamos cuando estara libre la cola
  44. # EPOCHTIME La fecha epoch
  45. WD=`pwd`
  46. LASTJOBFILE="/home/clabaqus/bin/var/lastjob"
  47. EPOCHTIME="1970-01-01"
  48.  
  49. # echo -e "++++++ \033[40m\033[31mAVISO IMPORTANTE\033[0m ++++++"
  50. echo "Programa para encolar problemas en ABAQUS"
  51. echo ""
  52. echo "Contacto: administrador_star.us.es"
  53. echo "Version 0.4 Mayo 2009"
  54. echo ""
  55.  
  56. # Bucle para discriminar los parametros de la linea de comando
  57. for param in "$@"
  58. do
  59. miarray=(`parametro $param`)
  60.  
  61. if [ ${miarray[0]} == "input" ]; then
  62. INPUT=${miarray[1]}
  63. fi
  64.  
  65. if [ ${miarray[0]} == "job" ]; then
  66. JOB=${miarray[1]}
  67. fi
  68.  
  69. if [ ${miarray[0]} == "cpus" ]; then
  70. CPUS=${miarray[1]}
  71. fi
  72.  
  73. if [ ${miarray[0]} == "email" ]; then
  74. EMAIL=${miarray[1]}
  75. fi
  76.  
  77. if [ ${miarray[0]} == "time" ]; then
  78. TIME=${miarray[1]}
  79. fi
  80. done
  81.  
  82. # Comprobamos que el trabajo tiene responsable
  83. if [ "x$EMAIL" == "x" ]; then
  84. echo "No se permiten trabajos sin responsable. EL TRABAJO NO SE HA ENVIADO.";
  85. exit 1;
  86. fi
  87.  
  88. # Tomamos cuando estara libre la cola
  89. if [ -e $LASTJOBFILE ]; then
  90. LASTJOBTIME=`cat $LASTJOBFILE`;
  91. else
  92. LASTJOBTIME=`date +%s`;
  93. fi
  94.  
  95. # Calculamos la hora de ejecución
  96. # TIMEDESTROY Hora que se tiene que cortar el calculo
  97. # NEXTJOBTIMEDESTROY Hora que se tiene que cortar el calculo en HUMAN READABLE
  98. # TIMESEC La fecha de próxima ejecución en EPOCH
  99. # NEXTJOBTIME La fecha de próxima ejecución en HUMAN READABLE
  100. TIMEDESTROY=`expr $LASTJOBTIME + $TIME \* 3600` || exit 1
  101. NEXTJOBTIMEDESTROY=`date +'%H%M %b %d' -d "$EPOCHTIME $TIMEDESTROY sec utc" `;
  102. TIMESEC=`expr $LASTJOBTIME + $TIME \* 3600 + 300` || exit 1
  103. NEXTJOBTIME=`date +'%H%M %b %d' -d "$EPOCHTIME $TIMESEC sec utc" `;
  104.  
  105. # Programamos la ejecución del cálculo
  106. LASTJOBTIMEHUMAN=`date +'%H%M %b %d' -d "$EPOCHTIME $LASTJOBTIME sec utc" `;
  107. doCalcScript $WD $INPUT $JOB $CPUS;
  108.  
  109. # Elaboramos la planificación de limpieza
  110. doCalcKillScript $WD $JOB $EMAIL;
  111.  
  112. # Guardamos la hora de la proxima ejecucion
  113. echo $TIMESEC > $LASTJOBFILE
  114.  
  115. # elaboramos el correo electronico
  116. NANOSECOND=`date +%N`
  117. TMPMAIL="/tmp/email$NANOSECOND"
  118. JOBNUMBER=`atq | sort | tail -n 1 | cut -f1,2 -d" "`
  119. TOTALJOBS=`atq | wc -l`
  120.  
  121. echo "Se ha enviado un nuevo trabajo a la cola" >> $TMPMAIL
  122. echo "" >> $TMPMAIL
  123. echo "Archivo de entrada : $INPUT" >> $TMPMAIL
  124. echo "Nombre del trabajo : $JOB" >> $TMPMAIL
  125. echo "Directorio de trabajo : $WD" >> $TMPMAIL
  126. echo "Numero de CPUS : $CPUS" >> $TMPMAIL
  127. echo "Numero de trabajo : $JOBNUMBER" >> $TMPMAIL
  128. echo "Numero total de trabajos : $TOTALJOBS" >> $TMPMAIL
  129. echo "Usuario responsable : $EMAIL" >> $TMPMAIL
  130. echo "Planificado para las : $LASTJOBTIMEHUMAN" >> $TMPMAIL
  131.  
  132. cat $TMPMAIL | email -s "[ABAQUS-AT] Nuevo trabajo: $JOB" $EMAIL
Add Comment
Please, Sign In to add comment