Personal tools

Script pentru restabilirea conexiunii ADSL

From linux360

Revision as of 16:08, 9 November 2006 by Ingerul (talk | contribs) (adaugat; stergerea fisierelor lock la bootare)
Jump to: navigation, search

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.

Pentru ca scriptul sa functioneze corect trebuie sa efectuati cateva schimbari in fisierele de configurare a sistemului. In primul rand 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

In cazul in care sistemul este restartat in timp ce ruleaza scriptul de restabilire a conexiunii ADSL fisierele lock folosite de acest script raman in directorul /tmp, ceea ce impiedica functionarea corecta a scriptului dupa restart. Pentru a evita aceasta situatie, dupa fiecare restart a sistemului trebuie sa stergeti aceste fisiere, in cazul in care exista. Este suficient sa adaugati urmatoarea linie intr-un fisier care va fi executat la bootare, de ex. /etc/rc.d/rc.local sau /etc/conf.d/local.start pe sistemele gentoo.

rm -f /tmp/chech_host*

Pentru a evita situatiile in care fisierele lock raman in directorul /tmp deorece sistemul a fost restartat in timp ce rula scriptul de restabilire a conexiunii

Exista o situatie in care pot aparea probleme, si anume atunci cand sistemul este resetat in timp ce scriptul ruleaza. Apoi trebuie sa va asigurati ca nu apar probleme in urma unei rebootari a sistemului din cauza fisierelor lock ramase in /tmp. Pentru a evita aceasta situatie la fiecare reboot trebuie sa va asigurati ca aceste fisiere nu exista in directorul /tmp.

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/peers

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/>

  1. !/bin/sh
  2. check_host.sh
  1. SETEAZA variabilele de mai jos
  1. fis. in care vor fi logate intreruperile

LOG_FILE=/var/log/check_host

  1. daca exista fis. $LOCK_FILE o alta instanta a scriptului inca ruleaza

LOCK_FILE=/tmp/check_host.sh.lock

  1. daca exista fis. $TAG_FILE inseamna ca si testul anterior a esuat sa
  2. stabileasca conexiunea

TAG_FILE=/tmp/chech_host.sh.tag

  1. hostul fol. pentru verificarea conexiunii; poate fi gateway-ul, de ex.

HOST=www.yahoo.com

  1. numele fis. care contine setarile pentru conexiunea ADSL
  2. 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