Retourner aux forums || Retourner au forum Programmation.shell
Programmation.shell : Script shell de surveillance de process ?? Besoin de votre aide
Posté par juju75020 () le 11 mai 2006Ci dessous mon script :
Le fichier parametre que j'ai crée s'appelle param. Il contient :
bash 4
sshd 1
dtlogin 1
Mon script qui ne marche pas :
#!/bin/bash
cat fichier_param | while read param
do
ps -A | grep `echo $param | awk '{print $1}'`
if test $? -eq 1
then
echo "`date "+%d/%m/%y"` Process manquant $param >>Alarme.log
fi
done
Je vous remercie pour votre aide.
> Lire le message (14 commentaires, moyenne: 1,1).
Guillemet manquant
Apparemment, il manque juste un guillemet après $param :
echo "`date "+%d/%m/%y"` Process manquant $param " >>Alarme.log
Avec ça, ça fonctionne chez moi.
Voili voilou
Just believe - just keep passing the open windows...
-
[^]Re: Guillemet manquant
Posté par juju75020 () le 11/05/2006 à 21:17. (lien). Évalué à 1.En effet avec le guillement il marche.
Merci.
Aurais tu ou ferais tu des modifications particulieres pour avoir un peu plus d'infos dans le fichier alarme.log ??
Ou si tu devais modifier ce script que ferais tu ??
Je demande ça car etant stagiaire, je suis preneur pour tout type de modif pouvant ameliorer ce script.
Merci pour ton retour.-
[^]Re: Guillemet manquant
Posté par Guillaume Caron (Jabber id, page perso, ) le 12/05/2006 à 07:14. (lien). Évalué à 1.Je ne sais pas ce qu'on pourrait faire comme modif, ça dépend de ce que tu souhaiterais faire.
On pourrait peut-être envoyer un mail ou un message via wall à l'administrateur pour qu'il soit prévenu immédiatement.
Ou alors, on pourrait lui faire relancer certains process tout seul, en ajoutant un troisième champ au fichier de paramètres qui vaudrait 1 si on souhaite que le process soit relancé en cas de problème, et en ajoutant dans le fichier Alarme le résultat (relancé ou non).
Après, on peut toujours mettre plein de fonctionnalités, le tout c'est que ça ne devienne pas une usine à gaz, même si ce n'est qu'un script, il faut quand même qu'il fonctionne pour ce qu'il a été écrit à l'origine.--
Just believe - just keep passing the open windows...-
[^]Re: Guillemet manquant
Posté par JJD () le 12/05/2006 à 08:59. (lien). Évalué à 1.Salut,
Ton script comporte quelques lacunes par rapport à ton cahier des charges ;-)
Que fais tu du nombre en deuxième position (nombre de processus) ?
Que se passe-t-il s'il exite des processus toto et tototo ?
Tu peux lire les arguments de ton fichier param avec la commande :
read cmd nb
et tu récupères ainsi directement les deux valeurs d'une ligne dans deux variables sans avoir besoin d'utiliser autre chose (awk).
Je t'offre ce qui est peut être une solution de facilité, mais j'ai écrit (en m'inspirant fortement de l'exitant) un plugin nagios qui doit faire ce que tu veux.
Evidemment c'est du Perl et pas du shellscript, mais cela semble fonctionner correctement et devrait répondre à tes besoins (et bien plus...)
Même si tu ne l'utilises pas directement, ça devrait te donner quelques pistes pour faire évoluer ton programme.
Tu peux voir à quoi ça ressemble : http://jjdoti.free.fr/check_procs
A+
JJD-
[^]Re: Guillemet manquant
Posté par totof2000 () le 12/05/2006 à 10:03. (lien). Évalué à 2.J'ai proposé un script à base de awk qui répondait exactement au cahier des charges ....
En ajoutant une troisième colonne contenant une commande à exécuter si le nombre de process devant tourner n'est pas correct, il est possible de faire un arrêt/relance propre en cas de problème.
-
-
[^]Re: Guillemet manquant
Posté par juju75020 () le 12/05/2006 à 18:46. (lien). Évalué à 1.En fait on me demande juste de creer ce script afin de surveiller plusieurs process. Il doit y avoir une liste de process et leur nombre qui doivent se trouver dans un fichier paramètre. Et à chaque fois qu'un process est manquant, il faut le signaler dans le fichier alarme.log.
En fait jvoudrai juste savoir si mon script est correct et si ya des ptites choses à modifier, je suis preneur.
Si une commande ne va pas, je suis preneur pour toute modif.
C'est un peu difficile pour moi car ya la pression de mon chef derriere !!
Merci pour ton aide.
-
[^]Re: Guillemet manquant
Posté par juju75020 () le 12/05/2006 à 19:09. (lien). Évalué à 1.EN fait j'ai juste besoin que ce script signal un process manquant et le redirige vers alarme.log.
a partir de mon script, peut-on modifier quelque chose ?
Car j'ai un peu de mal à comprendre et la pression de mon chef n'arrange rien !!
Meric pour ton aide.-
[^]Re: Guillemet manquant
Posté par Guillaume Caron (Jabber id, page perso, ) le 13/05/2006 à 21:35. (lien). Évalué à 1.Salut
En tenant compte de ce qui a été dit plus haut, j'ai un peu modifié ton script.
Déjà, on récupère séparément le nom du process et le nombre d'occurence.
Ensuite, on utilise " $param$" plutôt que $param (en mettant bien un espace entre " et $param) dans le grep pour être sûr de tomber sur le bon nom de process.
Et surtout, on appelle wc -l pour compter le nombre d'occurences qui fonctionnent, plutôt que de savoir qu'il y en a sans en connaître le nombre.
Avec ça, on peut voir s'il manque des occurences ou dire s'il y en a de trop.
Ça donne ceci :
#!/bin/bash
cat fichier_param | while read param nb
do
nb_running=$(ps -A | grep " $param$"|wc -l)
if test $nb_running -lt $nb
then
echo "`date "+%d/%m/%y"` $(($nb-$nb_running)) Process manquant(s) $param" >>Alarme.log
elif test $nb_running -gt $nb
then
echo "`date "+%d/%m/%y"` $(($nb_running-$nb)) Process supplementaire(s) $param" >>Alarme.log
fi
done
(dans les commentaires, le code n'est pas très clair parce que les indentations sont supprimées. Y'a un truc pour pouvoir les entrer correctement ?)
Voilà, j'espère que ça va t'aider.--
Just believe - just keep passing the open windows...-
[^]Re: Guillemet manquant
-
[^]Re: Guillemet manquant
Posté par juju75020 () le 19/05/2006 à 17:53. (lien). Évalué à 1.Ton script est vraiment bien !!
Je l'ai testé, nickel. Je te remercie
Jvai poster un nouveau sujet car bien sur mon chef me demande toujours des choses supplémentaires.
Maintenant il me demande de créer un script qui se baserait sur un fichier de parametre pour pinguer une liste de host. Qu'il faut signaler les hosts absents dans Alarme.log.
Et qu'un host est considéré absent uniquement s'il ne repond pas à 3 ping successifs espacés de 5 secondes.
Alors j'ai commencé à travailler dessus.
D'abord j'ai crée un fichier de parametre, appelé fichier _param ou j'ai enregistré des noms de sites internet : google.fr
yahoo.fr
Ensuite j'ai crée ce script :
#!/bin/bash
fichier_param=parametres_script3.txt
cat < $fichier_param | while read host_to_test
do
#echo $host_to_test
ping -c 3 -i 5 $host_to_test >/dev/null 2>&1
if [ "$?" = "0" ]; then
echo "$host_to_test is up"
else
echo "`date "+%d/%m/%y"` $host_to_test is down">>Alarme.log
fi
done
Mais je pense que je pourrai l'arranger.
Si tu pouvais me donner ton avis ??
Je te remercie.
-
-
-
-
wait $pid
Je propose une autre manière :
Tu lances un script qui lance un script en background pour chaque process.
le script lancé en bg prend en paramètre le pid du process à surveiller
wait $1 ;
echo "`date "+%d/%m/%y"` Process manquant $1 >>Alarme.log ;
et voila :), tu as une alerte dés que le process est terminé
on pourrait ajouter un deuxième paramètre avec le nom du process (histoire de savoir de quoi on parle)
tu détermines le pid a surveiller en bidouillant un peut ce que tu as fait (ps, grep, et cut seront tes amis :)
Dam
-
[^]Re: wait $pid
restartd
Sur debian (une woody) il y a restartd qui permet de faire exactement ce que tu veux.
Par contre je ne sais pas du tout si ce projet est maintenu. Je ne trouve que des references datant de 2002.
Rien sur rpmfind ou sur freshmeat. Le projet a certainement un autre nom. Je ne l'ai pas non plus trouve sur FC4 / Suse
La page du man :
http://www.penguin-soft.com/penguin/man/8/restartd.html
typiquement, dans le script du init.d/ tu specifie le fichier qui contient
la liste des process a surveiller.
Je ne serais pas etonne que d'autres projets du meme genre
existe pour le domaine embarqué (watchdog, etc.).
Khan
-
[^]Re: restartd
Posté par khan () le 12/05/2006 à 11:36. (lien). Évalué à 1.Comme j'ai pas laissé des infos, sans donné au moins un lien vers des sources, je me reponds a moi meme (LOL) :
http://packages.debian.org/unstable/utils/restartd
tu as un tgz en bas de la page, je ne sais pas si il s'agit de la derniere version, mais qui dit tégézed, dit les sources et potentiellement la possibilité de le recompiler de ton coté sur ta distrib.
K.
Revenir en haut de page || Retourner aux forums || Retourner au forum Programmation.shell


Cette discussion est archivée, il n'est plus possible de laisser des commentaires.
Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.