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

2

Eu quero verificar se um servidor se conectou à internet ou não. Eu tentei seguir o script sem sucesso, que é executado a cada 5 min e verifica e envia um email se ele 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 emails continuamente a cada 5 minutos assim que a conexão for estabelecida. Como faço para corrigir isso?

    
por Ash 07.06.2018 / 12:31

2 respostas

2

Porque você não quer ser notificado de um status, mas de uma alteração 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
    
por 07.06.2018 / 13:51
0

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

if [$? -eq 0]  

Ou isso

if [$? -e 0]  

é apenas um erro de digitação?

    
por 07.06.2018 / 12:43