Script gestione aMule anti crash

Ciao a tutti,
dietro suggerimento dell’ ADU-Team condivido con voi i miei script che utilizzo per gestire i fastidiosi crash del nostro amico aMule.

Di solito accade spesso (Murphy’s law) che appena si esce di casa lasciando il mulo acceso, nel giro di 10 minuti questo vada in crash. Addio sogni di trovare tanta roba al rientro a casa…

Per questo ho realizzato due script sh per il lancio e la gestione del mulo. Ho posizionato gli script e relativi file di log nella directory Script all’interno di .aMuleAdunanza

Fase 0 - Preparazione

Andate nella directory del vostro utente… nel mio caso nutria :):

cd /home/nutria/.aMuleAdunanzA/

e create la nuova directory Script

mkdir Script

Script 1: Lanciatore infinito

All’interno della directory

cd /home/nutria/.aMuleAdunanzA/Script

create lo script

vi emuleStart.sh

incollate il testo seguente

#!/bin/bash
while `/bin/true`; do 
/usr/bin/amule>/home/nutria/.aMuleAdunanzA/Script/logEmule.log 2>>/home/nutria/.aMuleAdunanzA/Script/logEmule.log
echo "#### Rilevato crash - riavvio `date` ####"
echo " " > /home/nutria/.aMuleAdunanzA/Script/logEmule.log
done

e salvate digitando “:wq”

Date ora i permessi di esecuzione allo script

chmod +777 emuleStart.sh

Lo script per lanciare aMule che gestisce i crash è pronto. Create un link/collegamento sul desktop e il gioco è fatto. Quando c’è da lanciare aMule fatelo usando questo script. Vi apparira un messaggio di come volete eseguire lo script, io seleziono “Eseguire nel terminale”. In questo modo quando volete chiudere amule, basterà chiudere la finestra del terminale.
Se durante l’esecuzione amule si chiude inaspettatamente il ciclo infinito dello script lo farà ripartire in automatico. Tutti i log di esecuzione dello script vengono salvati nella directory precedentemente creata nel file “/home/nutria/.aMuleAdunanzA/Script/logEmule.log”. Questo Log verrà usato nel secondo script di controllo

Script 2: Crash Freeze
Mi sono accorto che ultimamente aMule va in crash ma l’applicativo non si chiude. Nei log appare un messaggio di errore tipo il seguente:

E' stato riscontrato un errore che ha causato il crash di aMule AdunanzA.
Ricordate che il team di aMule ufficiale NON supporta in alcun modo
AdunanzA, quindi NON spedite loro il seg. log.
Il log potrebbe essere utile solo agli sviluppatori di aMule AdunanzA
accompagnato da informazioni quali:
 - la versione di Adunanza attuale ovvero
      aMule 2.3.1 - AdunanzA 2012.1;
 - il sistema operativo (Linux/MacOS/FreeBSD/Windows varie ed eventuali),
   la distribuzione e la versione;
 - la descrizione (il piu' dettagliata possibile) delle azioni che hanno portato
   al crash.
Sappiate comunque che dump originati da eseguibili compilati SENZA le opzioni
di debug o CON OTTIMIZZAZIONI abilitate NON saranno presi in considerazione
(sono praticamente inutili).
Se possibile provate a generare un vero backtrace come descritto in:
    http://wiki.amule.org/index.php/Backtraces

----------------------------=| BACKTRACE FOLLOWS: |=----------------------------
Current version is: aMuleAdunanzA MOD based on aMule 2.3.1 compiled with wxGTK2 v2.8.12 AdunanzA 2012.1
Running on: Linux 3.16.0-38-generic x86_64

La cosa è particolarmente odiosa perchè il nostro amico mulo non scarica più e si freeza. Non chiudendosi il precedente script dello step1 non serve a nulla.

Da qui nasce il mio secondo script che ho schedulato ogni 2 minuti nella crontab :-). Quando aMule non è in attività e state usando il pc per altro non è un problema perchè non ha effetti collaterali.

All’interno della directory

cd /home/nutria/.aMuleAdunanzA/Script

create lo script

vi emuleCTRL.sh

incollate il testo seguente

#!/bin/sh
export pathFileLog=/home/nutria/.aMuleAdunanzA/Script/logEmule.log 
export controllore=`grep "stato riscontrato un errore che ha causato il crash di aMule AdunanzA" $pathFileLog | wc -l`
export testdate="`date  "+%Y-%m-%d %H:%M:%S"`"

echo "$testdate-Righe con errore :"$controllore
if [ "$controllore" -ne "0" ] ; then
  echo "$testdate-Crash AdunanzaEmule rilevato: uccido il vecchio processo con pid -"`pidof /usr/bin/amule`"-"
  pidof /usr/bin/amule | `awk '{print "kill -9 "$0}'`
else
  echo "$testdate-Tutto ok"
fi
echo "$testdate-########################"

e salvate digitando “:wq”

Date ora i permessi di esecuzione allo script

chmod +777 emuleCTRL.sh

Lo script va poi schedulato nel crontab. Da linea di comando digitate

crontab -e

ed inserite la seguente riga:

*/2 * * * * /home/nutria/.aMuleAdunanzA/Script/eMuleCTRL.sh > /dev/null 2>/dev/null
#>/dev/null 2>&1

Lo script quindi gira ogni due minuti, verifica nel file di log dello step 1 se è presente una parte del messaggio di errore che manda in crash+freeze aMule, se si uccide il processo. Lo script della fase1 ovviamente rilevando la chiusura di aMule lo farà ripartire. Gioco fatto.

L’ho testato per un po di giorni e tutto funziona bene. Lo so andrebbe cercata la causa, ma ci vuole troppo, cosi mi sono arrabattato. Ovviamente se avete migliorie o varianti fatemi sapere. Consigli costruttivi sempre ben accetti…

ciao a tutti e buon uso aMuleAdunanza

9 Mi Piace