Relancer un processus si il plante

Relancer un processus si il plante - Linux et OS Alternatifs

Marsh Posté le 23-04-2004 à 11:31:00    

salut tlm
 
alors j ai fait un script qui démare plusieurs processus correspondant chaqun à une tache différente qui tourne constament
 
mon pb c que au bout de qques heures certains de ces processus st arrétes
 
je voudrai pouvoir vérifier s'ils tournent et les relancer si ce n'est pas le cas
 
merci de votre aide
 
++
 
PkDeV

Reply

Marsh Posté le 23-04-2004 à 11:31:00   

Reply

Marsh Posté le 23-04-2004 à 11:33:10    

désolé je viens de m apercevoir que j avais mi mon post a la racine de OSA
 
si un modo pouvai le déplacer dsn OSA/Scripts...
 
merci

Reply

Marsh Posté le 23-04-2004 à 11:46:45    

pour vérifier toutes les deux minutes :

while [ 1 ]; do /sbin/pidof nom_du_process > /dev/null || _truc_a_faire_pour_le_relancer; sleep 2m; done

Reply

Marsh Posté le 23-04-2004 à 12:19:18    

le plus simple c'est que tu lances tes divers process depuis l'inittab en mode respawn
 
comme ça ton script doit aussi controler les processus et si un d'eux est stoppé ou tué, il tue ses divers process et lui meme.  
 
le mode respwn fait qu'il renait de lui meme et donc relance les processus.


---------------
If everything else failed then read the instructions
Reply

Marsh Posté le 23-04-2004 à 13:09:53    

merci de votre aide
 
je vais essayer d etre un pe plus préci sur mon script pcq je pense que ce que vous m'avez di ne fonctionnerai pas dans mon cas
 
j'ai donc placé ce script ds /etc/rc.d/init.d
et j ai fai des liens ds /etc/rc3.d

Code :
  1. #!/bin/sh
  2. env LANG=C /usr/local/mrtg-2/bin/mrtg /usr/local/mrtg-2/bin/cfg/mrtg-134.3.2.1.cfg
  3. env LANG=C /usr/local/mrtg-2/bin/mrtg /usr/local/mrtg-2/bin/cfg/mrtg-134.3.2.2.cfg
  4. env LANG=C /usr/local/mrtg-2/bin/mrtg /usr/local/mrtg-2/bin/cfg/mrtg-134.3.2.3.cfg
  5. env LANG=C /usr/local/mrtg-2/bin/mrtg /usr/local/mrtg-2/bin/cfg/mrtg-134.3.2.4.cfg
  6. ....


et le pb c'est que certain des processus générer par ces commandes plante mais j aimais tous en meme tps il fodrai ke je récupere le PID de chacun pour vérifier s'il tourne ou pas
 
enfin je vai essayer ac vos conseil et je verai si ca marche
 
++

Reply

Marsh Posté le 23-04-2004 à 14:08:50    

oui exactement il suffit de verifier les PID et si un n'est plus present alors stopper l'enssemble proprement.
 
et comme ça le respawn dans l'inittab relance le script et donc la generation des process du manager mrtg.


---------------
If everything else failed then read the instructions
Reply

Marsh Posté le 23-04-2004 à 14:23:08    

oui je veux bien mais je le récupère comment le PID pcq le nom du processus c'est MRTG dans tous les cas

Reply

Marsh Posté le 23-04-2004 à 14:36:55    

Non il suffit de recuperer les nombre de PID des process mrtg parceque si un seul manque (planté il faut de toute façon) tous les relancer.
 
il faut tester la presence de l'enssemble des x processus
genre (dans le cas ou tu en a 6)...
if [ `ps -ef | grep mrtg | wc` -lt 6 ]; then
#cas ou manque un des 6 process si il y en a 6 normalement
....
killall mrtg
killall $0
exit 1
else
#ne rien faire
fi
 


---------------
If everything else failed then read the instructions
Reply

Marsh Posté le 23-04-2004 à 14:54:35    

ouai je comprend ce que tu veux dire mais ca m oblige a kill tous les process et moi j en ai plus d une dizaine et donc fo redémarrer les 10 après
 
i serait pas possible de ne redémarrer que le proc qui a planté??

Reply

Marsh Posté le 23-04-2004 à 15:02:23    

ben dans ce cas, faut que tu utilises des verrous (fichier)

Reply

Marsh Posté le 23-04-2004 à 15:02:23   

Reply

Marsh Posté le 23-04-2004 à 15:03:39    

Citation :

ben dans ce cas, faut que tu utilises des verrous (fichier)


 
heu ... c'est à dire ???

Reply

Marsh Posté le 23-04-2004 à 15:15:02    

ben quand ton script démarre, il dépose un fichier temporaire portant par exemple comme nom mrtg_1.$$
 
$$ étant le pid du process.
 
Et quand tu check, tu verifies pour tes n fichiers verrous, si les process correspondant sont toujours là. Si non, tu enlèves le fichier, et tu relance le mrtg avec le bon paramètre (grâce au numéro que tu à récupéré sur le nom du fichier).
 
C'est juste une proposition, je sais pas si c'est la meilleure solution ... :)

Reply

Marsh Posté le 23-04-2004 à 17:12:46    

pkdev a écrit :

ouai je comprend ce que tu veux dire mais ca m oblige a kill tous les process et moi j en ai plus d une dizaine et donc fo redémarrer les 10 après
 
i serait pas possible de ne redémarrer que le proc qui a planté??


 
oui mais comme c'est le script qui les redemarre et que lui meme est relancé automatiquement tu n'as rien à faire... jamais...


---------------
If everything else failed then read the instructions
Reply

Marsh Posté le 23-04-2004 à 17:16:12    

bobuse a écrit :

ben quand ton script démarre, il dépose un fichier temporaire portant par exemple comme nom mrtg_1.$$
 
$$ étant le pid du process.
 
Et quand tu check, tu verifies pour tes n fichiers verrous, si les process correspondant sont toujours là. Si non, tu enlèves le fichier, et tu relance le mrtg avec le bon paramètre (grâce au numéro que tu à récupéré sur le nom du fichier).
 
C'est juste une proposition, je sais pas si c'est la meilleure solution ... :)


 
ça balanche beaucoup de fichiers et donc d'acces disque c'est ça qui est pas super... pour mrtg c'est pas trop genant ça bouffe pas de ressources immences mais parfois... ça peu beaucoup ralentir des applications utilisant des fichiers verrous.
 


---------------
If everything else failed then read the instructions
Reply

Sujets relatifs:

Leave a Replay

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