Script de reconnection

Forum dédié à la distribution du même nom et que vous pourrez télécharger sur http://www.contribs.org. La nouvelle version de cette distribution se nomme SME Server

Modérateur: modos Ixus

Messagepar MasterSleepy » 25 Août 2003 21:27

Salut à tous, <BR> <BR>Voilà, ma connection est encore partie en live cette après-midi, et ça a l'art de m'enerver au plus au point. <BR>Pourquoi il se plante? et bien j'ai l'impression que quand la coupure de la ligne arrive trop près de la reconnexion, tout se bloque, et le reconnexion suivant n'arrive à rien. <BR>Je dois alors killer tous les process qui trainent et relancer le tout manuellement. <BR>Alors voilà le script initial que je voudrais modifier : <BR>#!/bin/sh <BR># Description : Starts and stops an ADSL connection (PPPoA) <BR>#/etc/rc.d/init.d/pppoa <BR> <BR> <BR>LOG=/var/log/adsl <BR> <BR>getip() <BR>{ <BR> IP=`/sbin/ifconfig ppp0 | fgrep "inet ad" | cut -f2 -d":" | cut -f1 -d" "` <BR>} <BR> <BR>. /etc/rc.d/init.d/functions <BR> <BR>case "$1" in <BR>start) <BR> echo -n "Starting pppoa (version 3) :" <BR> echo $(date)" : Loading USB modules ..." >> LOG <BR> rmmod usb-uhci <BR> modprobe usb-uhci <BR> mount -t usbdevfs none /proc/bus/usb <BR> sleep 2 <BR> echo $(date)" : Loading microcode ..." >> $LOG <BR> /usr/local/bin/modem_run -f /usr/local/bin/mgmt.o -m <BR> echo $(date)" : Microcode loaded" >> $LOG <BR> modprobe n_hdlc <BR> route del default <BR> echo $(date)" : Running pppd" >> $LOG <BR> /usr/sbin/pppd call adsl <BR> echo $(date)" : ADSL Started" >> $LOG <BR> sleep 20 <BR> # /sbin/e-smith/expand-template /etc/rc.d/init.d/masq <BR> # service masq restart <BR> /etc/vanhees.homeip.net.conf <BR> ;; <BR> <BR>stop) <BR> echo -n "Shutting down pppoa (version 3) : " <BR> echo $(date)" : Killing pppd ..." >> $LOG <BR> killproc pppd <BR> echo $(date)" : ADSL Stopped" >> $LOG <BR> ;; <BR> <BR>restart) <BR> echo $(date)" : Restarting ADSL connection ..." >> $LOG <BR> echo $(date)" : Killing pppd ..." >> $LOG <BR> killproc pppd <BR> echo $(date)" : pppd killed" >> $LOG <BR> sleep 2 <BR> echo $(date)" : Starting pppd" >> $LOG <BR> route del default <BR> /usr/sbin/pppd call adsl <BR> echo $(date)" : ADSL Started" >> $LOG <BR> sleep 20 <BR> # /sbin/e-smith/expand-template /etc/rc.d/init.d/masq <BR> # service masq restart <BR> /etc/vanhees.homeip.net.conf <BR> ;; <BR>*) echo "Usage: $0 { start,stop,restart}" <BR>exit 1 <BR>esac <BR>exit 0 <BR> <BR>Je voudrais le modifier, mais je sais pas comment. <BR> <BR>J'avais pensé à mettre un flag dans un fichier au début du start et le changer à la fin pour indiquer que tout c'était bien passé. Le vérifier à la reconnexion suivante, si il n'est pas fini je kill tout. <BR> <BR>Cela vous parait une bonne solution???? <BR>Enfin si vous en avez une meilleure je suis preneur. <IMG SRC="images/smiles/icon_biggrin.gif"> <BR> <BR>Merci, <BR>A+.
"Microsoft fera quelque chose qui ne plantera jamais quand ils commenceront à fabriquer des clous "
http://www.vanhees.cc
Avatar de l’utilisateur
MasterSleepy
Amiral
Amiral
 
Messages: 2625
Inscrit le: 24 Juil 2002 00:00
Localisation: Belgique

Messagepar tomtom » 26 Août 2003 07:58

C'est un peu violent comme script de reconnection, non ? <BR> <BR>Tu ne peux pas tout simplement relancer le script de connection de base (au hasard startPPPoE ) ? <BR> <BR>T.
One hundred thousand lemmings can't be wrong...
Avatar de l’utilisateur
tomtom
Amiral
Amiral
 
Messages: 6035
Inscrit le: 26 Avr 2002 00:00
Localisation: Paris

Messagepar MasterSleepy » 26 Août 2003 08:28

Malheureusement je suis en pppoa avec un modem usb speedtouch. <BR>la reconnection appele la fonction restart du script, voir plus haut, mais il n'arrive pas à arreter les proc en place.
"Microsoft fera quelque chose qui ne plantera jamais quand ils commenceront à fabriquer des clous "
http://www.vanhees.cc
Avatar de l’utilisateur
MasterSleepy
Amiral
Amiral
 
Messages: 2625
Inscrit le: 24 Juil 2002 00:00
Localisation: Belgique

Messagepar tomtom » 26 Août 2003 09:08

Ha ba oui desolé.... <BR>J'avais mal lu... <BR> <BR>T.
One hundred thousand lemmings can't be wrong...
Avatar de l’utilisateur
tomtom
Amiral
Amiral
 
Messages: 6035
Inscrit le: 26 Avr 2002 00:00
Localisation: Paris

Messagepar MasterSleepy » 26 Août 2003 09:20

Oh ben pas grave du tout, mais tu n'aurais pas un idée <IMG SRC="images/smiles/icon_biggrin.gif"> <BR> <BR>Sinon je pars sur ma première idée et dès que j'ai finis j'envoye le nouveau script.
"Microsoft fera quelque chose qui ne plantera jamais quand ils commenceront à fabriquer des clous "
http://www.vanhees.cc
Avatar de l’utilisateur
MasterSleepy
Amiral
Amiral
 
Messages: 2625
Inscrit le: 24 Juil 2002 00:00
Localisation: Belgique

Messagepar Tgx » 26 Août 2003 09:55

Pour autant que je sache, ta connexion n'est pas cassée réellement (tu conserves la synchro), par contre ton FAI supprime ta connexion au niveau de son serveur d'authentification. <BR> <BR>La première idée qui me vienne rejoint la tienne : la durée entre la déconnexion / reconnexion peut-être trop brève pour le serveur d'authent. <BR> <BR>Donc je commencerai par rajouter un <!-- BBCode Start --><I>sleep</I><!-- BBCode End --> au début de la partie <!-- BBCode Start --><I>restart</I><!-- BBCode End --> <BR> <BR>quel est ton FAI ? <BR> <BR>/Tgx
... forever shall the wolf in me desire the sheep in you ...
(Nightwish)
Avatar de l’utilisateur
Tgx
Premier-Maître
Premier-Maître
 
Messages: 53
Inscrit le: 19 Août 2003 00:00
Localisation: la zone... dans le 94

Messagepar MasterSleepy » 26 Août 2003 10:13

Skynet en belgique. <BR>
"Microsoft fera quelque chose qui ne plantera jamais quand ils commenceront à fabriquer des clous "
http://www.vanhees.cc
Avatar de l’utilisateur
MasterSleepy
Amiral
Amiral
 
Messages: 2625
Inscrit le: 24 Juil 2002 00:00
Localisation: Belgique

Messagepar Tgx » 26 Août 2003 10:39

aïe, je n'avais pas regardé ton profil, donc incertitude. <BR> <BR>Je sais qu'en france, il y a eu à une certaine époque pas mal de problème au niveau serveur d'authent avec l' "ADSL Autoconnect" liés justement à une trop grande réactivité du programme (il fonctionnait trop bien <IMG SRC="images/smiles/icon_biggrin.gif"> ). <BR> <BR>En supposant que tout ceci soit normalisé, augmenter les temps d'attente avant de tenter la reconnexion est peut-être un début de solution... <BR> <BR>/Tgx
... forever shall the wolf in me desire the sheep in you ...
(Nightwish)
Avatar de l’utilisateur
Tgx
Premier-Maître
Premier-Maître
 
Messages: 53
Inscrit le: 19 Août 2003 00:00
Localisation: la zone... dans le 94

Messagepar MasterSleepy » 26 Août 2003 13:18

Bon voilà ce à quoi je suis arrivé... <BR> <BR>Le script /etc/init.d/pppoa donne ça : <BR>#!/bin/sh <BR># Description : Starts and stops an ADSL connection (PPPoA) <BR>#/etc/rc.d/init.d/pppoa <BR> <BR> <BR>LOG=/var/log/adsl <BR> <BR>getip() <BR>{ <BR>IP=`/sbin/ifconfig ppp0 | fgrep "inet ad" | cut -f2 -d":" | cut -f1 -d" "` <BR>} <BR> <BR>killallprocess() <BR>{ <BR> for i in `pidof pppoa3` <BR> do <BR> kill -9 $i <BR> done <BR> for i in `pidof pppd` <BR> do <BR> kill -9 $i <BR> done <BR> for i in `pidof modem_run` <BR> do <BR> kill -9 $i <BR> done <BR>} <BR> <BR>. /etc/rc.d/init.d/functions <BR> <BR>case "$1" in <BR> start) <BR> echo -n "Starting pppoa (version 3) :" <BR> echo $(date)" : Loading USB modules ..." >> $LOG <BR> rmmod usb-uhci <BR> modprobe usb-uhci <BR> mount -t usbdevfs none /proc/bus/usb <BR> sleep 2 <BR> echo $(date)" : Loading microcode ..." >> $LOG <BR> /usr/local/bin/modem_run -f /usr/local/bin/mgmt.o -m <BR> echo $(date)" : Microcode loaded" >> $LOG <BR> modprobe n_hdlc <BR> route del default <BR> echo $(date)" : Running pppd" >> $LOG <BR> /usr/sbin/pppd call adsl <BR> echo $(date)" : ADSL Started" >> $LOG <BR> sleep 20 <BR> # /sbin/e-smith/expand-template /etc/rc.d/init.d/masq <BR> # service masq restart <BR> /etc/vanhees.homeip.net.conf <BR> ;; <BR> <BR> stop) <BR> echo -n "Shutting down pppoa (version 3) : " <BR> echo $(date)" : Killing pppd ..." >> $LOG <BR> killproc pppd <BR> echo $(date)" : ADSL Stopped" >> $LOG <BR> ;; <BR> <BR> restart) <BR> echo $(date)" : Restarting ADSL connection ..." >> $LOG <BR> echo $(date)" : Killing pppd ..." >> $LOG <BR> killproc pppd <BR> echo $(date)" : pppd killed" >> $LOG <BR> sleep 2 <BR> echo $(date)" : Starting pppd" >> $LOG <BR> route del default <BR> /usr/sbin/pppd call adsl <BR> echo $(date)" : ADSL Started" >> $LOG <BR> sleep 20 <BR> # /sbin/e-smith/expand-template /etc/rc.d/init.d/masq <BR> # service masq restart <BR> /etc/vanhees.homeip.net.conf <BR> ;; <BR> <BR> hardrestart) <BR> echo $(date)" : HARDKilling pppd ..." >> $LOG <BR> killallprocess <BR> echo $(date)" : Wait 1 min before reconnect ..." >> $LOG <BR> sleep 60 <BR> echo $(date)" : Starting normal service ..." >> $LOG <BR> start <BR> ;; <BR> *) echo "Usage: $0 { start,stop,restart,hardrestart}" <BR>exit 1 <BR>esac <BR>exit 0 <BR> <BR>Et dans le script de vérification pour le relancement de la connection : <BR>#!/bin/sh <BR># By Baz (Merci à lui!) <BR> <BR>LOCKFILE=/var/lock/subsys/pppoa <BR> <BR>#Check IPs from ifconfig <BR>getip() <BR>{ <BR> IP=`/sbin/ifconfig ppp0 | fgrep "inet ad" | cut -f2 -d":" | cut -f1 -d" "` <BR>} <BR>getstatus() <BR>{ <BR> STAT=`cat "$LOCKFILE"` <BR>} <BR> <BR>#Check if ppp0 is up, if not, restart the connction <BR>getip <BR>#Pas d'ip on n'est pas connecter <BR>if ! [ "$IP" ]; then <BR> #Verification du status du process <BR> getstatus <BR> if [ "$STAT" = "FIRSTRESTART" ]; then <BR> #Le premier redemarrage n'a rien donné <BR> #on essaye plus violent <BR> /etc/rc.d/init.d/pppoa hardrestart & <BR> exit <BR> else <BR> # Premier redemarrage <BR> echo "FIRSTRESTART" >> $LOCKFILE <BR> /etc/rc.d/init.d/pppoa restart & <BR> exit <BR> fi <BR>else <BR> #ON est connecter <BR> getstatus <BR> #Verification du status pour savoir si il faut mettre le fichier à blanc <BR> if ! [ "$STAT" ]; then <BR> echo > $LOCKFILE <BR> fi <BR> <BR>fi <BR> <BR>Cela vous semble-t-il correct ???? <BR> <BR>D'avance merci. @+
"Microsoft fera quelque chose qui ne plantera jamais quand ils commenceront à fabriquer des clous "
http://www.vanhees.cc
Avatar de l’utilisateur
MasterSleepy
Amiral
Amiral
 
Messages: 2625
Inscrit le: 24 Juil 2002 00:00
Localisation: Belgique

Messagepar MasterSleepy » 26 Août 2003 21:49

Bon ben pas d'avis <IMG SRC="images/smiles/icon_bawling.gif"> <BR> <BR>Allez je me lance, je vous tiendrai au courant.
"Microsoft fera quelque chose qui ne plantera jamais quand ils commenceront à fabriquer des clous "
http://www.vanhees.cc
Avatar de l’utilisateur
MasterSleepy
Amiral
Amiral
 
Messages: 2625
Inscrit le: 24 Juil 2002 00:00
Localisation: Belgique

Messagepar JBJBJB171717 » 17 Sep 2004 21:59

Il fonctionne au fait ton script ? Y a t-il eu des modifications ?

Ca m'interesserai un script pour reconnecté automatiquement lors d'une deconnexion, car mon script actuel ne fonctionne pas et ma connexion saute assez souvent pour des raisons dont je me demande...

Si ca dis qqc à qqn ca :


Code: Tout sélectionner
Sep 17 17:25:13 sme-v601 kernel: NETDEV WATCHDOG: eth1: transmit timed out
Sep 17 17:25:13 sme-v601 kernel: [Adi] Transmit timed out!
Sep 17 17:25:13 sme-v601 kernel: [Adi] transmit URB c4c190bc cancelled
Sep 17 17:25:27 sme-v601 kernel: [adi] Modem operational !!


ou ca :

Code: Tout sélectionner
Sep 17 10:02:40 sme-v601 kernel: [Adi] transmit error with URB status -110


Merci!
Avatar de l’utilisateur
JBJBJB171717
Capitaine de vaisseau
Capitaine de vaisseau
 
Messages: 300
Inscrit le: 28 Août 2004 22:46

Messagepar MasterSleepy » 18 Sep 2004 09:14

Salut,

Je vais reposter la totalité des scripts on sait jamais ça pourra peut-être en interresser d'autre.

Un fichier pour définir une tâche dans le cron

/etc/cron.d/pppoa

Code: Tout sélectionner
*/10 * * * * root /usr/local/bin/reco-pppoa &


Le fichier /usr/local/bin/reco-pppoa
chmod 0755

Code: Tout sélectionner
#!/bin/sh
# By Baz (Merci à lui!)

LOCKFILE=/var/lock/subsys/pppoa

#Check IPs from ifconfig
getip()
{
        IP=`/sbin/ifconfig ppp0 | fgrep "inet ad" | cut -f2 -d":" | cut -f1 -d" "`
}

getstatus()
{
  STAT=`cat $LOCKFILE`
}

#Check if ppp0 is up, if not, restart the connction
getip
#Pas d'ip on n'est pas connecter
if ! [ "$IP" ]; then
    #Verification du status du process
    getstatus
    if [ "$STAT" = "FIRSTRESTART" ]; then
        #Le premier redemarrage n'a rien donné
        #on essaye plus violent
        /etc/rc.d/init.d/pppoa hardrestart &
        exit
    else
        # Premier redemarrage
        echo "FIRSTRESTART" > $LOCKFILE
        /etc/rc.d/init.d/pppoa restart &
        exit
    fi
else
    #ON est connecter
    #Verification du status pour savoir si il faut mettre le fichier à blanc
        echo > $LOCKFILE

fi


Et enfin le fichier /etc/rc.d/init.d/pppoa
chmod 0755

Code: Tout sélectionner
#!/bin/sh
# Description : Starts and stops an ADSL connection (PPPoA) #/etc/rc.d/init.d/pppoa


LOG=/var/log/adsl

getip()
{
   IP=`/sbin/ifconfig ppp0 | fgrep "inet ad" | cut -f2 -d":" | cut -f1 -d" "`
}

killallprocess()
{
    for i in `pidof pppoa3`
    do
       kill -9 $i
    done
    for i in `pidof pppd`
    do
       kill -9 $i
    done
    for i in `pidof modem_run`
    do
       kill -9 $i
    done
}

start()
{
        echo -n "Starting pppoa (version 3) :"
        echo $(date)" : Loading USB modules ..." >> $LOG
        rmmod usb-uhci
        modprobe usb-uhci
        mount -t usbdevfs none /proc/bus/usb
        sleep 2
        echo $(date)" : Loading microcode ..." >> $LOG
        /usr/local/bin/modem_run -f /usr/local/bin/mgmt.o -m
        echo $(date)" : Microcode loaded" >> $LOG
        modprobe n_hdlc
        route del default
        echo $(date)" : Running pppd" >> $LOG
        /usr/sbin/pppd call adsl
        echo $(date)" : ADSL Started" >> $LOG
        sleep 20

   # relance de snort pour nouvelle IP
        /etc/rc.d/init.d/snortd restart
        /etc/rc.d/init.d/guardiand restart
        /etc/rc.d/init.d/bwbar restart
}

stop()
{
        echo -n "Shutting down pppoa (version 3) : "
        echo $(date)" : Killing pppd ..." >> $LOG
        killproc pppd
        echo $(date)" : ADSL Stopped" >> $LOG

}

restart()
{
        echo $(date)" : Restarting ADSL connection ..." >> $LOG
        echo $(date)" : Killing pppd ..." >> $LOG
        killproc pppd
        echo $(date)" : pppd killed" >> $LOG
        sleep 2
        echo $(date)" : Starting pppd" >> $LOG
        route del default
        /usr/sbin/pppd call adsl
        echo $(date)" : ADSL Started" >> $LOG
        sleep 20
}

hardrestart()
{
        echo $(date)" : HARDKilling pppd ..." >> $LOG
        killallprocess
        echo $(date)" : Wait 1 min before reconnect ..." >> $LOG
        sleep 30
        echo $(date)" : Starting normal service ..." >> $LOG
        start
}

. /etc/rc.d/init.d/functions

case "$1" in
    start)
        start
    ;;

    stop)
        stop
    ;;

    restart)
        restart
    ;;

    hardrestart)
        hardrestart
    ;;
    *) echo "Usage: $0 { start,stop,restart,hardrestart }"
exit 1
esac
exit 0


Tous ces scripts ne fonctionnent que pour le modem Speedtouch USB, il faudra l'adapter pour les autres modems.

A+
"Microsoft fera quelque chose qui ne plantera jamais quand ils commenceront à fabriquer des clous "
http://www.vanhees.cc
Avatar de l’utilisateur
MasterSleepy
Amiral
Amiral
 
Messages: 2625
Inscrit le: 24 Juil 2002 00:00
Localisation: Belgique

Messagepar JBJBJB171717 » 02 Oct 2004 11:37

Salut, j'ai essayer tes script, mais j'ai un pb avec le script de reconnexion. Je me demande comment il peut marcher chez toi car moi lorqu'il est appelé, l'interface ppp0 n'existe deja plus donc la récupération de l'IP échoue et la variable IP ne vaut donc rien et le test un peu plus loin de passe surement pas. Sinon il pourrait y avoir un autre moyen, c en initialisant la variable IP, mais je n'y arrive pas :-\

Sinon j'avais pensé à autre chose, c'est d'appelé une routine de redémarrage de la connexion dans le répértoire des évenement ip-down avec un script qui attend qqc seconde puis qui relance la connexion si la déconnexion n'a pas été manuelle

Par exemple si j'ai fait "pppoa stop" j'écrit ds un fichier "MAN" ce qui indique au script dans ip-down que la déconnexion a été manuelle donc il faut pas reco automatiquement.

Mais bon ca a été encore un échec, j'ai fait un hardrestart à chaque appel de l'évenement ip-down mais je me retrouve avec une erreur :
Code: Tout sélectionner
Oct 1 11:30:26 sme-v601 kernel: Unable to handle kernel NULL pointer dereference at virtual address 00000000
Oct  1 11:30:26 sme-v601 kernel:  printing eip:
et ensuite tt le détail du contenu de la pile.....

Si qqn a une idée si tte mes questions merci de m'aider

- comment initialiser la variable IP du script avec une chaine vide par exemple
- en ce qui concerne l'évenemen ip-down

Merci
Avatar de l’utilisateur
JBJBJB171717
Capitaine de vaisseau
Capitaine de vaisseau
 
Messages: 300
Inscrit le: 28 Août 2004 22:46

Messagepar MasterSleepy » 06 Oct 2004 10:38

Salut,

La variable IP est initialé par le script reco-pppoa qui est éxecuté toutes les 10 minutes.

A+
"Microsoft fera quelque chose qui ne plantera jamais quand ils commenceront à fabriquer des clous "
http://www.vanhees.cc
Avatar de l’utilisateur
MasterSleepy
Amiral
Amiral
 
Messages: 2625
Inscrit le: 24 Juil 2002 00:00
Localisation: Belgique


Retour vers E-Smith / SME Server

Qui est en ligne ?

Utilisateur(s) parcourant actuellement ce forum : Aucun utilisateur inscrit et 1 invité