mercoledì 15 ottobre 2014

Script Bash per riavviare un programma

Un problema che si e' posto recentemente e' quello di un programma che gestisce l'acquisione di un sensore si blocca in modo casuale con un messaggio nel log di connection reset by peer

Essendo un software commerciale la consultazione su internet non ha portato risultati e cosi' e'stato provato di scrivere un piccolo programmino in bash da mandare in background che controlla l'attivita' del programma e nel caso lo riavvia

Purtroppo quando il programma entra in errore di fatto non crasha ma rimane attivo in memoria senza fare niente, come in stallo, per cui mediante il comando ps non e' possibile verificare il suo stato di funzionamento
E' stato notato pero' che il file di log si blocca nel momento in cui il programma entra in stallo per cui lo script bash controlla la dimensione del file ad intervalli prefissati, nel caso le dimensioni del file di log non mutino si killa il processo e lo si riavvia

(in giallo le parti da personalizzare)
-----------------------------------------------------------------------------
#!/bin/bash
prima=0 #lunghezza file di log prima
dopo=0 #lunghezza file di log dopo
while true; do #ciclo infinito
dopo=$(stat -c%s "dati.log") #inserire qui il nome del file di log
if (($dopo==$prima)); #se prima e dopo l'intervallo la lunghezza e' uguale
then
echo "Non Cambiato" #effettua il kill del processo e lo riavvia
kill -9 $(pidof nome_programma) #mettere come parametro di pidoff il nome del programma da killare
nome_programma #mettere qui il nome del programma da far ripartire
fi

prima=$dopo #scambia il valore delle variabili per il prossimo ciclo
sleep 30 #intervallo di scansione del file di log
done
-----------------------------------------------------------------------------