Forum Programmation.shell Script de surveillance de process en ksh

Posté par  .
Étiquettes : aucune
0
2
avr.
2008

Bonjour tout le monde.

Je dois réaliser un script en shell qui compare les process d'une liste 'procList' à ceux qui sont déja en train de tourner (ps). C'est du ksh, et je ne sais pas ou est l'erreur. Pouvez-vous m'aider sil vous plait.

Voila mon code source

#!/bin/ksh

more procList | while read line

do


NomProc=$(ps -A | grep `echo $line | awk '{print $1}')

if [ $? -eq 1 ] ; then echo "$NomProc ne tourne pas." >> Alarme.log
else
fi

done
  • # A ma sauce

    Posté par  . Évalué à 2.


    #!/bin/ksh
    cat procList | while read line
    do
    NomProc=$(ps $line | awk '{print $1}')
    if [ $? -eq 1 ] ; then echo "$NomProc ne tourne pas." >> Alarme.log ; fi
    done


    Ceci suppose que procList contient une liste de PIDs
    • [^] # Re: A ma sauce

      Posté par  . Évalué à 2.

      Suis-je bête, je me suis attaché a la forme et pas au fond,

      Comment veux-tu afficher "$NomProc" si celui-ci ne tourne pas ?

      De plus le $? risque de faire reference à la commande awk (voire à l'affectation) et non pas au ps

      donc

      #!/bin/ksh
      cat procList | while read line
      do
      ps $line >/dev/null
      if [ $? -eq 1 ] ; then echo "le PID $line ne tourne pas." >> Alarme.log ; fi
      done
      • [^] # Re: A ma sauce

        Posté par  . Évalué à 1.

        Ok merci beaucoup de t'être penché sur mon problème. Mais serait-il possible de faire la comparaison avec le nom de process et pas son numéro PID ?
        • [^] # Re: A ma sauce

          Posté par  . Évalué à 2.

          oui bien sur avec un " ps -A | grep ... "
          • [^] # Re: A ma sauce

            Posté par  . Évalué à 1.

            C'est ce que j'ai éssayé de faire plus haut mais apparament la syntaxe n'est pas bonne. Le script que tu m'as envoyé ne peut etre exécuté à cause d'une différence de 'BSD'. Cela signifie quoi ? Je tourne sur une SUSE.
            • [^] # Re: A ma sauce

              Posté par  . Évalué à 2.


              #!/bin/ksh
              cat procList | while read line
              do
              if [ `ps ax | grep $line | wc -l ` -le 1 ] ; then echo "le process $line ne tourne pas." >> Alarme.log ; fi
              done


              pour le coup du BSD, il s'agit probablement du type de formatage des options du ps ( avec ou sans "-" ce qui dans un cas est a la norme POSIX et de l'autre BSD )
              • [^] # Re: A ma sauce

                Posté par  . Évalué à 1.

                moi je metterai un
                if ps ax | grep $line | grep -s -v grep
                then
                echo ... > Alarm.log
                fi

                ce qui évite que le grep soit potentiellement dans la liste des processus ( mais pas toujours ce qui rend un comptage de ligne hasardeux )
                ( le -s permet au grep de n'afficher aucune ligne ( mais renvoi vrai si il aurait du en afficher )

                Il ne faut pas décorner les boeufs avant d'avoir semé le vent

                • [^] # Re: A ma sauce

                  Posté par  . Évalué à 1.

                  quand on fait que du Linux et qu'on a pas à se soucier des problèmes de portabilité, un moyen simple de se sortir du grep qui apparait dans le ps ou pas, c'est d'utiliser l'option -C de ps.

                  Le truc cool aussi, c'est que l'option -C peut être invoquée plusieurs fois pour un même appel à ps, ce qui peut permettre de simplifier notoirement la réponse au problème d'abendas :)

                  C'est plus rigolo de chercher soi-même ;)
                  mais je peux proposer un bout de script avec des ps -C si c'est nécessaire.
                  • [^] # Re: A ma sauce

                    Posté par  . Évalué à 1.

                    Merci beaucoup. C'est marrant mais je ne connaissait pas cet option.

Suivre le flux des commentaires

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