
Quiero comprobar si un servidor se ha conectado a Internet o no. Intenté seguir el script sin éxito, que se ejecuta cada 5 minutos y verifica y envía un correo electrónico si está conectado a 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
Pero el problema es que recibiré continuamente correos electrónicos cada 5 minutos una vez que se establezca la conexión. ¿Cómo puedo solucionar esto?
Respuesta1
Porque no desea que le notifiquen un estado sino un cambio de estado. Entonces debes recordar en algún lugar cuál era el estado 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
Respuesta2
Podría ser mejor comprobar si el resultado es cero en lugar de -e, ¿verdad?
if [$? -eq 0]
O esto
if [$? -e 0]
¿Es solo un error tipográfico?