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