Script pentru restabilirea conexiunii ADSL
From linux360
Observatii
Scriptul de fata este util abonatilor Romtelecom care au conexiuni ADSL si folosesc modemurile Speedtouch 330 pe USB, modemuri care se desincronizeaza destul de des. Scriptul detecteaza, rezolva si tine evidenta problemele aparute.
Scriptul trebuie rulat in fiecare minut din crontab. Pentru aceasta trebuie sa adaugati in fisierul /etc/crontab linia de mai jos:
* * * * * root /calea/catre/check_host.sh
Inainte de folosi acest script, va rog schimbati variabilele in functie de nevoile personale. Cea mai importanta variabila este CONEXIUNE. Variabila indica numele fisierului ce contine informatiile despre conexiune ADSL (nume utilizator, parola, etc...). Acest fisier se afla deobicei in directorul /etc/ppp/perrs
Un log generat de aplicatie arata cam asa:
BEGINING > Sat Mar 11 21:49:01 GMT 2006
END > Sun Mar 12 10:34:44 GMT 2006
BEGINING > Mon Mar 13 08:07:11 GMT 2006
END > Mon Mar 13 08:13:12 GMT 2006
SINGLE > Fri Mar 17 16:17:49 GMT 2006
BEGINING > Sat Mar 18 07:23:55 GMT 2006
END > Sat Mar 18 07:24:44 GMT 2006
SINGLE > Wed Mar 22 01:39:09 GMT 2006
Scriptul efectiv
<sh/>
- !/bin/sh
- check_host.sh
- SETEAZA variabilele de mai jos
- fis. in care vor fi logate intreruperile
LOG_FILE=/var/log/check_host
- daca exista fis. $LOCK_FILE o alta instanta a scriptului inca ruleaza
LOCK_FILE=/tmp/check_host.sh.lock
- daca exista fis. $TAG_FILE inseamna ca si testul anterior a esuat sa
- stabileasca conexiunea
TAG_FILE=/tmp/chech_host.sh.tag
- hostul fol. pentru verificarea conexiunii; poate fi gateway-ul, de ex.
HOST=www.yahoo.com
- numele fis. care contine setarile pentru conexiunea ADSL
- acest fis. se afla deobicei in dir. /etc/ppp/peers/
CONEXIUNE=adsl_express
if ! ping -c 3 $HOST &>/dev/null && ! test -f $LOCK_FILE ; then
touch $LOCK_FILE
# aici incercam sa restabilim conexiunea killall -9 pppd sleep 35 pppd call $CONEXIUNE
ping -c 3 $HOST &>/dev/null TEST=$?
if [ $TEST -eq 0 ]; then if [ ! -f $TAG_FILE ]; then echo "SINGLE >" `date`>>$LOG_FILE else echo "END >" `date`>>$LOG_FILE rm -f $TAG_FILE fi else if [ ! -f $TAG_FILE ]; then echo "BEGINING >" `date`>>$LOG_FILE touch $TAG_FILE fi fi
rm -f $LOCK_FILE
fi