2010-05-27 18 views
10

Necesito un script Bash (o un shell simple) para poner un cronjob que comprueba cada minuto si Internet está activo.Script Bash para (más o menos) verificar de manera confiable si Internet está activo

Esto es cómo lo hice:

#! /bin/sh 

host1=google.com 
host2=wikipedia.org 
curr_date=`date +"%Y%m%d%H%M"` 

echo -n "${curr_date};" 
((ping -w5 -c3 $host1 || ping -w5 -c3 $host2) > /dev/null 2>&1) && 
echo "up" || (echo "down" && exit 1) 

¿Cómo hacerlo? ¿A qué hosts harías ping?

Aclaraciones:

  • Por "Internet es hasta", me refiero a mi conexión internet.

  • Por " arriba", que significa tener conexión utilizable (no importa realmente si estamos hablando de ser el DNS hacia abajo o la conexión es realmente muy lento [cuenta el tiempo de espera para -w]). Esa es también la razón por la que no incluí ningún IP sino solo hosts.

¿Debo también hacer ping Stack Overflow? Quiero decir, si no puedo acceder a Google, Wikipedia o Stack Overflow, no quiero Internet: p

+0

Google es lo que siempre utilizo para probar si tengo una conexión. –

+0

8.8.8.8 sería bueno también, especialmente debido a que es multidifusión. –

+6

Internet en general es generalmente "alto". Sin embargo, su conexión a ella puede no serlo. ;-) –

Respuesta

5

Parece una buena solución. Simplemente agregue algunos hosts más, y tal vez algunos hosts de IP puro para que no confíe en el funcionamiento del DNS (que en sí mismo depende de su definición de "arriba").

+1

En realidad, dependiendo del funcionamiento del DNS podría ser una buena cosa. Si desea verificar la operación real "Puedo navegar por la web como normal", entonces requerir soporte DNS es A Good Thing (TM). –

1

¿Qué parte de la conectividad a Internet está buscando verificar? DHCP? DNS? Físicamente enchufado a un gato? Kernel reconociendo la presencia de la NIC?

Puede consultar manualmente los servidores DNS de su ISP utilizando el comando host(1). En general, esto es una buena indicación de si su enrutador ha perdido su conexión con el ISP.

Puede consultar qué interfaces tiene su kernel usando netstat(8) o ifconfig(8).

Puede obtener estadísticas detalladas sobre la interfaz usando ifstat.

4

Gracias por su código, funciona muy bien, me han dejado sólo una línea realidad:

((ping -w5 -c3 8.8.8.8 || ping -w5 -c3 4.2.2.1) > /dev/null 2>&1) && echo "up" || (echo "down" && exit 1) 
Cuestiones relacionadas