Forum Programmation.shell Script shell de surveillance de process ?? Besoin de votre aide

Posté par .
Tags : aucun
0
11
mai
2006
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 . É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

    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 . É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 . É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.

        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 . É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 . É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 . É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 . É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 . É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.

            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 . É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 . É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 . É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 . É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 . É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 . É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.

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.