Shell script recebe notificação por e-mail quando o servidor está conectado à internet

Shell script recebe notificação por e-mail quando o servidor está conectado à internet

Quero verificar se um servidor está conectado à internet ou não. Tentei seguir o script sem sucesso, que é executado a cada 5 minutos e verifica e envia um e-mail se estiver conectado à internet.

 ping -c 3 192.168.0.25 > /dev/null 2>&1
    if [ $? -eq 0 ]
    then
      mailx -s "Server is Up" -t "[email protected]" < /dev/null   
  fi

Mas o problema é que receberei e-mails continuamente a cada 5 minutos assim que a conexão for estabelecida. Como faço para corrigir isso?

Responder1

Porque você não deseja ser notificado sobre um status, mas sim sobre uma mudança de status. Então você tem que lembrar em algum lugar qual era o status anterior, algo como:

#! /bin/bash

statusFile=/var/tmp/connected # used to remember status
pingedHost=8.8.8.8
checkPeriod=5 # seconds

while true
do
    echo "Sleeping..."
    sleep $checkPeriod
    echo "Checking..."
    ping -c 1 $pingedHost > /dev/null 2>&1
    if [[ $? -eq 0 ]]
    then
        echo "Ping OK..."
        if [[ ! -f $statusFile ]] # not connected already
        then
            echo "Reconnected..."
            # send reconnection mail here
            touch $statusFile # remember state
        fi
    else
        echo "Ping KO..."
        if [[ -f $statusFile ]] # was connected before
        then
            echo "Disconnected..."
            # send disconnection mail here
            rm $statusFile # remember state
        fi
    fi
done

Responder2

Poderia ser melhor verificar se o resultado é zero em vez de -e, certo?

if [$? -eq 0]  

Ou isto

if [$? -e 0]  

é apenas um erro de digitação?

informação relacionada