Pastie now auto-senses if line-wrap is a bad or good idea. Feedback?
## mark a section (Learn more)
#!/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
This paste will be private.
From the Design Piracy series on my blog: