Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- # Este script permite lanzar trabajos de calculo en la cola de abaqus
- #
- # Fede Diaz (nordri at gmail dot com)
- # Jul 30 2008
- # Leera la linea de comando y seleccionara los parametros
- function parametro() {
- echo $1 | awk -F"=" '{ print $1 " " $2 }'
- }
- # Escribira el script para lanzar el calculo y lo programara para
- # cuando el ultimo activo tenga que terminar.
- function doCalcScript () {
- BINDIR="/home/clabaqus/bin/abaqus";
- echo -e "#!/bin/bash \n " \
- "PATH=\"/usr/bin:/bin:/usr/local/bin\" \n" \
- "cd $1 && abaqus input=$2 job=$3 cpus=$4" > $BINDIR/S$3.sh;
- chmod u+x $BINDIR/S$3.sh;
- at $LASTJOBTIMEHUMAN -f $BINDIR/S$3.sh 2>&1
- }
- # Escribira el script para terminar el calculo, antes verificara que no
- # este activo, si lo esta enviara la señal de terminate.
- function doCalcKillScript () {
- BINDIR="/home/clabaqus/bin/abaqus"
- PROC=$(pgrep Python.exe)
- SEEKANDDESTROY="if [ $PROC ]; then cd $1 && abaqus terminate job=$2;fi \n";
- SENDCALCREPORT="cd $1 && cat $2.log | email -s \"[ABAQUS] Resultado del calculo\" $3";
- echo -e "#!/bin/bash \n " \
- "PATH=\"/usr/bin:/bin:/usr/local/bin\" \n " \
- "$SEEKANDDESTROY $SENDCALCREPORT" > $BINDIR/K$2.sh;
- chmod u+x $BINDIR/K$2.sh;
- at $NEXTJOBTIMEDESTROY -f $BINDIR/K$2.sh 2>&1
- }
- # Variables globales:
- # WD Directorio de trabajo donde se invoca al script
- # LASTJOBFILE Fichero donde apuntamos cuando estara libre la cola
- # EPOCHTIME La fecha epoch
- WD=`pwd`
- LASTJOBFILE="/home/clabaqus/bin/var/lastjob"
- EPOCHTIME="1970-01-01"
- # echo -e "++++++ \033[40m\033[31mAVISO IMPORTANTE\033[0m ++++++"
- echo "Programa para encolar problemas en ABAQUS"
- echo ""
- echo "Contacto: administrador_star.us.es"
- echo "Version 0.4 Mayo 2009"
- echo ""
- # Bucle para discriminar los parametros de la linea de comando
- for param in "$@"
- do
- miarray=(`parametro $param`)
- if [ ${miarray[0]} == "input" ]; then
- INPUT=${miarray[1]}
- fi
- if [ ${miarray[0]} == "job" ]; then
- JOB=${miarray[1]}
- fi
- if [ ${miarray[0]} == "cpus" ]; then
- CPUS=${miarray[1]}
- fi
- if [ ${miarray[0]} == "email" ]; then
- EMAIL=${miarray[1]}
- fi
- if [ ${miarray[0]} == "time" ]; then
- TIME=${miarray[1]}
- fi
- done
- # Comprobamos que el trabajo tiene responsable
- if [ "x$EMAIL" == "x" ]; then
- echo "No se permiten trabajos sin responsable. EL TRABAJO NO SE HA ENVIADO.";
- exit 1;
- fi
- # Tomamos cuando estara libre la cola
- if [ -e $LASTJOBFILE ]; then
- LASTJOBTIME=`cat $LASTJOBFILE`;
- else
- LASTJOBTIME=`date +%s`;
- fi
- # Calculamos la hora de ejecución
- # TIMEDESTROY Hora que se tiene que cortar el calculo
- # NEXTJOBTIMEDESTROY Hora que se tiene que cortar el calculo en HUMAN READABLE
- # TIMESEC La fecha de próxima ejecución en EPOCH
- # NEXTJOBTIME La fecha de próxima ejecución en HUMAN READABLE
- TIMEDESTROY=`expr $LASTJOBTIME + $TIME \* 3600` || exit 1
- NEXTJOBTIMEDESTROY=`date +'%H%M %b %d' -d "$EPOCHTIME $TIMEDESTROY sec utc" `;
- TIMESEC=`expr $LASTJOBTIME + $TIME \* 3600 + 300` || exit 1
- NEXTJOBTIME=`date +'%H%M %b %d' -d "$EPOCHTIME $TIMESEC sec utc" `;
- # Programamos la ejecución del cálculo
- LASTJOBTIMEHUMAN=`date +'%H%M %b %d' -d "$EPOCHTIME $LASTJOBTIME sec utc" `;
- doCalcScript $WD $INPUT $JOB $CPUS;
- # Elaboramos la planificación de limpieza
- doCalcKillScript $WD $JOB $EMAIL;
- # Guardamos la hora de la proxima ejecucion
- echo $TIMESEC > $LASTJOBFILE
- # elaboramos el correo electronico
- NANOSECOND=`date +%N`
- TMPMAIL="/tmp/email$NANOSECOND"
- JOBNUMBER=`atq | sort | tail -n 1 | cut -f1,2 -d" "`
- TOTALJOBS=`atq | wc -l`
- echo "Se ha enviado un nuevo trabajo a la cola" >> $TMPMAIL
- echo "" >> $TMPMAIL
- echo "Archivo de entrada : $INPUT" >> $TMPMAIL
- echo "Nombre del trabajo : $JOB" >> $TMPMAIL
- echo "Directorio de trabajo : $WD" >> $TMPMAIL
- echo "Numero de CPUS : $CPUS" >> $TMPMAIL
- echo "Numero de trabajo : $JOBNUMBER" >> $TMPMAIL
- echo "Numero total de trabajos : $TOTALJOBS" >> $TMPMAIL
- echo "Usuario responsable : $EMAIL" >> $TMPMAIL
- echo "Planificado para las : $LASTJOBTIMEHUMAN" >> $TMPMAIL
- cat $TMPMAIL | email -s "[ABAQUS-AT] Nuevo trabajo: $JOB" $EMAIL
Add Comment
Please, Sign In to add comment