Puede usar una versión modificada de este script para hacer lo que quiera:
#!/bin/bash
downTime=0
lastAccessTime=$(date +"%s")
while [ true ]; do
if ! ping -c1 google.com >& /dev/null; then
downTime=$(( $(date +"%s") - $lastAccessTime ))
else
downTime=0
lastAccessTime=$(date +"%s")
fi
sleep 15
if [ $downTime -ge 300 ]; then
echo "alert"
fi
done
Estamos "CONECTADOS" Ejemplo
Con la depuración activada para que pueda ver lo que está haciendo el script.
set -x
Ejecutar con un nombre de host válido para demostrar el estado "la conexión está activa".
$ ./watcher.bash
+ downTime=0
++ date +%s
+ lastAccessTime=1402276955
+ '[' true ']'
Lo anterior inicializa un par de variables y determina la última vez que fuimos a través del lazo, $lastAccessTime
. Ahora intentamos hacer ping a Google.
+ ping -c1 google.com
+ downTime=0
++ date +%s
+ lastAccessTime=1402276955
Ahora calculamos cualquier tiempo de inactividad $downTime
, si el ping falla, de lo contrario, restablecemos $downTime
a cero y volvemos a calcular $lastAccessTime
.
+ sleep 15
Ahora esperamos 15 segundos.
+ '[' 0 -ge 300 ']'
Ahora verificamos si hemos estado inactivos durante> 5 minutos (300 segundos). Luego repetimos pasando por el while
bucle.
+ '[' true ']'
+ ping -c1 google.com
+ downTime=0
++ date +%s
+ lastAccessTime=1402276970
+ sleep 15
....
Mientras estemos despiertos, no pasará nada más que verificar con el ping
comando cada 15 segundos.
Estamos "DESCONECTADOS" Ejemplo
Ahora para simular una "conexión está inactiva" estado, vamos a intercambiar el nombre de host que estamos ping y el uso de una falsificación uno, google1234567890.com
. Repitiendo una ejecución de nuestro script con la depuración habilitada, ahora vemos que se calcula un tiempo de inactividad real.
$ ./watcher.bash
+ downTime=0
++ date +%s
+ lastAccessTime=1402277506
+ '[' true ']'
+ ping -c1 google1234567890.com
++ date +%s
+ downTime=0
+ sleep 15
+ '[' 0 -ge 300 ']'
+ '[' true ']'
+ ping -c1 google1234567890.com
++ date +%s
+ downTime=15
+ sleep 15
...
Observe arriba que $downTime
es igual a 15 segundos hasta ahora. Si esperamos un poco más, veremos esto:
+ '[' true ']'
+ ping -c1 google1234567890.com
++ date +%s
+ downTime=300
+ sleep 15
Hemos acumulado 300 segundos de tiempo de inactividad. Así que ahora cuando comprobamos, imprimimos el mensaje, alert
.
+ '[' 300 -ge 300 ']'
+ echo alert
alert
+ '[' true ']'
+ ping -c1 google1234567890.com
++ date +%s
+ downTime=315
+ sleep 15
Este estado continuará hasta que se restablezca la conexión y ping
vuelva a tener éxito.
¿Y qué hay de un sonido?
Eso es fácil. Puede usar una variedad de herramientas para hacer esto. Usaría algo como sox
o mplayer
para reproducir un archivo de audio como un archivo .mp3
o .wav
con un sonido apropiado que desea escuchar cada 15 segundos, mientras la conexión está inactiva.
mplayer someaudio.wav
Simplemente reemplace el alert
mensaje anterior con esta línea para obtener comentarios de audio de que la conexión está desconectada.
Tiempo de espera de problemas con ping
Si lo usa ping
de la manera anterior, es probable que encuentre un tiempo de retraso lento en el que se tarda ping
literalmente entre 10 y 20 segundos en fallar cuando la conexión no funciona. Vea mi respuesta a esta pregunta y respuesta de U&L titulada: ¿Cómo redirigir la salida de cualquier comando? para un ejemplo usando la herramienta de línea de comando en su fing
lugar. Esta herramienta fallará más rápidamente que la tradicional ping
.