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?