Aide pour un script :)

Aide pour un script :) - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 29-07-2003 à 11:33:03    

Voila, j'ai implémenté (comme vous pouvez le voir dans un autre thread) un vpn en ppp over ssh entre une conenxion ip fixe et une ip dynamqiue. Le Vpn doit donc se couper et se recréer lors de la reconnexion de l'ip dynamique. Je me disais: facile je claque mes scripts dans ip-up et ip-down et c'est fait... Seulement la connexion ppp s'effectuant sur le ssh execute aussi ces scripts donc j'ai vite 30 connexions PPP simultanément ce qui ne m'arrange pas trop.  
 
J'ai donc pensé a un 'interrupteur' qui serait à 1 lorsque la connexione est instanciée et à 0 sinon, et je testerais cet interrupteur dans mon script ip-up et ip-down. Seulement, je suis un gros nul en scripting (qui ne demande qu'a apprendre :) ) et je vous pose donc ces deux questions:
 
Est ce que cette solution d'interrupteur est optimale?  
Pouvez vous me donner une ébauche de script qui testerait ca :)  
 
Merci bcp :)

Reply

Marsh Posté le 29-07-2003 à 11:33:03   

Reply

Marsh Posté le 30-07-2003 à 09:33:36    

bouhhh personne?

Reply

Marsh Posté le 30-07-2003 à 10:26:41    

watcho a écrit :

bouhhh personne?


 
Pour exectuter une action une seul fois tu deverais cree un fichier dans /var/run/ a la fin du script qui etabli la connection.
 

Code :
  1. echo "1" > /var/run/vpn


 
Et tu place cette ligne au debut du script ifup.

Code :
  1. if [ -f /var/run/vpn ]; then
  2. exit 1
  3. fi


Comme ca il ne se lance qu'une fois !
 
Voila
 

Reply

Marsh Posté le 30-07-2003 à 15:26:52    

Je rajouterais un test au début du script de connexion qui efface obligatoirement le fichier /var/run/vpn au cas où la connexion serait interrompue anormalement. En fait, il faut même toujours l'effacer, et faire les tests après, je pense.

Reply

Marsh Posté le 30-07-2003 à 17:09:14    

si tu l'effaces systematiquement au debut du script il ne sert plus à rien non ?  :??:  
je vois plutot un test sur ps -eaf |grep tondemon, mais bon j'ai pas super reflechi à ca pour le moment, j'ai d'ailleurs un probleme  dans le meme genre avec proftpd ou le fichier de lock reste présent apres un crash


---------------
je garde toujours une balle pour moi ou pour mon enemi
Reply

Marsh Posté le 30-07-2003 à 17:48:21    

blame a écrit :

si tu l'effaces systematiquement au debut du script il ne sert plus à rien non ?  :??:  

Ben si. La première fois que le truc se lance, il faut bien créer un fichier correspondant au fait qu'il tourne. Mais à  un moment, tu es sûr que le processus ne tourne pas. Si le fichier existe à ce moment-là, c'est qu'il y a eu un problème. Et par exemple, dans ce fichier, tu mets le numéro de PID du processus (d'où l'intérêt de recréer à chaque fois le fichier).
Par contr, une fois le script lancé (et le script sait que le dméon est censé tourner), il faut vérifier la présence de ce fichier de lock.
 
C4est curieux, j'ai l'impression de pas être très clair.

Reply

Marsh Posté le 30-07-2003 à 18:24:48    

sisi t'es tres clair [:arhendal]
 
Je dirai que tu n'es sur que le processus ne tourne plus lors du stop, donc il n'y a que la que tu puisses supprimer le fichier de bloquage.
c'est bien la le probleme, si la machine est coupée a cause de l'electricité par exemple alors le bloquage ne sera pas eliminé et ton processus ne pourra pas demarrer.
Tu voudrais supprimer le fichier de bloquage au debut mais alors rien n'empechera ton script de supprimer ce fichier, de faire un test et voyant que le fichier n'existe pas de lancer le process.
Et si tu veux supprimer ce fichier plus tard apres le test alors cela reviens a dire que le fichier n'existe pas.
 
 :??:  suis je clair a mon tour


---------------
je garde toujours une balle pour moi ou pour mon enemi
Reply

Marsh Posté le 30-07-2003 à 22:05:10    

Pourquoi ne pas faire un truc simple :  
 
 
pidof PROCESSUS > /dev/null  
 if [ $? -eq 0 ]  
  then echo "deja une connection"  
  else echo " pas de processus"
  fi

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed