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 2006
0
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.

> Lire le message (14 commentaires, moyenne: 1,1).  

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.

Guillemet manquant

Posté par Guillaume Caron (Jabber id, page perso, ) le 11/05/2006 à 20:16. (lien). Évalué à 2.

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

            Posté par juju75020 () le 17/05/2006 à 10:18. (lien). Évalué à 1.

            je te remercie pour tes infos.
            jvais tester.

            Jte dirai si ca marche ou pas.

            Merci encore.

            A+

          • [^]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

Posté par Hardy Damien (page perso, ) le 12/05/2006 à 08:24. (lien). Évalué à 1.

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

    Posté par xavier () le 12/05/2006 à 09:23. (lien). Évalué à 1.

    pour cela encore faudrait'il que les process/pid a surveiller soient des fils du shell faisant le wait, ce qui vu la liste proposée est improbable :)

restartd

Posté par khan () le 12/05/2006 à 11:28. (lien). Évalué à 1.

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