Forum Programmation.shell Aide pour terminer mon script...

Posté par  .
Étiquettes : aucune
0
14
mai
2007
Bonjour à tous,

J'ai bricolé un petit script qui me permet de tester (un ping via crontab), que ma machine n'est pas plantée. S'il y a plantage, j'envois un mail. Mon petit script fonctionne parfaitement. Le problème est que quand la machine ne répond plus au ping, j'ai un mail d'alerte toute les minutes (temps du test de la crontab).
Donc je souhaiterais que mon script n'envois plus de mail tant que la machine ne répond pas. Par contre, quand la machine répond à nouveau, j'envoie un mail pour dire que tout est rentré dans l'ordre.

Merci pour votre aide.
  • # fichier

    Posté par  . Évalué à 2.

    Tu utilises un fichier temporaire (dans /tmp) qui contient le résultat du dernier ping et tu n'envoie un mail que sur changement du statut.
    • [^] # Re: fichier

      Posté par  . Évalué à 1.

      Bonjour,

      C'est ce que je fais actuellement. Par contre, je ne vois pas bien comment faire pour tester l'existance du fichier test. De plus, si le fichier test existe, je n'envoie plus de mail mais dès que le problème est réglé, je veux être informé par mail que le ping est à nouveau OK.

      Merci pour votre aide.

      Voilà mon script:

      #!/bin/bash
      #
      # Fichier pour éviter les répétitions.
      TOUCH=/tmp/test

      # déclaration IP
      HOSTS="192.168.0.10"

      # nombre de ping.
      COUNT="3"

      # paramètres email.
      SUBJECT="10 est en vrac!"
      EMAILID="mon_mail"

      for myHost in $HOSTS
      do
      count=$(ping -c $COUNT $myHost | grep 'received' | awk -F',' '{ print $2 }' | awk '{ print $1 }')
      if [ ! -f $TOUCH ]; then
      if [ $count -eq 0 ]; then
      echo "10 ne répond plus au ping depuis $(date)" | mail -s "$SUBJECT" $EMAILID
      touch $TOUCH
      fi
      fi
      done
  • # Utiliser un fichier d'état

    Posté par  . Évalué à 1.

    Le problème c'est que tes commandes lancées par cron n'ont pas d'état. Pour connaitre le précédent état, le plus simple est de passer par un fichier. Avec quelque chose du genre


    etat=`cat /tmp/etatmachine`

    etatcourant=`testmachine`


    if [ "$etatcourant" != "$etat" ]
    then
    envoimail "$etatcourant"
    fi

    echo "$etatcourant" > /tmp/etatmachine

Suivre le flux des commentaires

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