Voilà mon problème : j'essai de créer un script shell pour surveiller une liste de process sur un serveur. Ce script doit surveiller les process qui sont dans un fichier de parametre avec leur nombre. quand un process est manquant, il doit générer une alerte vers un fichier Alarme.log.
Ci 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.
# Guillemet manquant
Posté par zebra3 . Évalué à 2.
echo "`date "+%d/%m/%y"` Process manquant $param " >>Alarme.log
Avec ça, ça fonctionne chez moi.
Voili voilou
Article Quarante-Deux : Toute personne dépassant un kilomètre de haut doit quitter le Tribunal. -- Le Roi de Cœur
[^] # Re: Guillemet manquant
Posté par juju75020 . Évalué à 1.
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 zebra3 . Évalué à 1.
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.
Article Quarante-Deux : Toute personne dépassant un kilomètre de haut doit quitter le Tribunal. -- Le Roi de Cœur
[^] # Re: Guillemet manquant
Posté par JJD . Évalué à 1.
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 . Évalué à 2.
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 . Évalué à 1.
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 . Évalué à 1.
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 zebra3 . Évalué à 1.
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.
Article Quarante-Deux : Toute personne dépassant un kilomètre de haut doit quitter le Tribunal. -- Le Roi de Cœur
[^] # Re: Guillemet manquant
Posté par juju75020 . Évalué à 1.
jvais tester.
Jte dirai si ca marche ou pas.
Merci encore.
A+
[^] # Re: Guillemet manquant
Posté par juju75020 . Évalué à 1.
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
Posté par Hardy Damien . Évalué à 1.
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
Posté par xavier . Évalué à 1.
# restartd
Posté par khan . Évalué à 1.
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 . Évalué à 1.
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.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.