Pagine

venerdì 3 gennaio 2014

Ripetere comando fino a quando non termina correttamente

Lo script esegue il comando specificato e termina solo se il comando completa l'esecuzione correttamente (return code = 0) oppure si è raggiunto il limite massimo di tentativi.

Primo parametro: comando da eseguire (se si devono specificare dei parametri al comando da eseguire, si deve scrivere il comando ed i suoi parametri tra i doppi apici)

Secondo parametro: numero di secondi di pausa prima di ritentare l'esecuzione.

Terzo parametro (opzionale): massimo numero di tentativi prima di terminare definitivamente.

repeatWhileReturnCodeKo.sh
#!/bin/bash
function repl {
printf "$1"'%.s' $(eval "echo {1.."$(($2))"}"); echo ""
}

x=1
lenriga=80
char="="
ret="1"
if [ $# -lt 2 ]
then
echo "Uso: `basename $0` COMANDO_DA_ESEGUIRE_RIPETUTAMENTE PAUSA_SECONDI [MAX_TENTATIVI]"
exit 1
fi
timeout=$2

max=0
if [ $# -gt 2 ]; then
max=$3
fi
echo "max = $max"
while [ "$ret" -ne "0" ]
do
tempo=$(date +%Y-%m-%d_%H:%M:%S)
repl $char $lenriga
echo "$tempo - Avvio # $x di '$1'..."
$1
ret="$?"
tempo=$(date +%Y-%m-%d_%H:%M:%S)
if [ "$ret" -ne "0" ]; then
if [ "$max" -eq "$x" ]; then
repl $char $lenriga
echo "$tempo - Raggiunto il numero massimo di tentativi (# $max)."
echo "$tempo - Comando '$1' terminato con ERRORE. Return code = $ret"
exit $ret;
fi
echo ""
echo ""
repl $char $lenriga
echo "$tempo - Comando '$1' terminato con ERRORE. Return code = $ret"
echo "$tempo - Pausa di $timeout secondi prima di riavviare '$1'..."
sleep $timeout
x=$(( $x + 1 ))
else
echo "$tempo - Comando '$1' terminato con SUCCESSO."
fi
done
exit $ret;

Nessun commento:

Posta un commento