El script de Shell recibe una notificación por correo electrónico cuando el servidor está conectado a Internet

El script de Shell recibe una notificación por correo electrónico cuando el servidor está conectado a Internet

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?

información relacionada