¿Hay una manera fácil de verificar la conectividad a Internet desde la consola? Estoy tratando de jugar en un script de shell. Parece que una idea es comprobar el código de respuesta HTTP para interpretar si la conexión a Internet funciona bien. Pero creo que debe haber una manera fácil sin la necesidad de revisar un sitio que nunca falla;)wget --spider http://www.google.co.in/
Editar: Parece que puede haber muchos factores que pueden examinarse individualmente, algo bueno. Mi intención en este momento es verificar si mi blog está caído. He configurado cron para verificarlo cada minuto. Para esto, estoy revisando el código de respuesta HTTP de wget --spider para mi blog. Si no es 200, me lo notifica (creo que esto será mejor que simplemente hacer ping, ya que el sitio puede estar bajo una gran carga y puede estar agotando el tiempo de espera o responder muy tarde). Ahora ayer, hubo algún problema con mi Internet. LAN estaba bien conectada pero no pude acceder a ningún sitio. Así que sigo recibiendo notificaciones ya que el script no pudo encontrar 200 en la respuesta de wget. Ahora quiero asegurarme de que me muestre una notificación cuando tenga conectividad a Internet.
Por lo tanto, verificar la conectividad de DNS y LAN es un poco exagerado para mí, ya que no tengo tanta necesidad específica de averiguar qué problema es. Entonces, ¿qué sugieres cómo lo hago?
Aquí está mi script para seguir revisando el tiempo de inactividad de mi blog:
#!/bin/bash
# Sending the output of the wget in a variable and not what wget fetches
RESULT=`wget --spider http://blog.ashfame.com 2>&1`
FLAG=0
# Traverse the string considering it as an array of words
for x in $RESULT; do
if [ "$x" = '200' ]; then
FLAG=1 # This means all good
fi
done
if [ $FLAG -eq '0' ]; then
# A good point is to check if the internet is working or not
# Check if we have internet connectivity by some other site
RESULT=`wget --spider http://www.facebook.com 2>&1`
for x in $RESULT; do
if [ "$x" = '200' ]; then
FLAG=1 # This means we do have internet connectivity and the blog is actually down
fi
done
if [ $FLAG -eq '1' ]; then
DISPLAY=:0 notify-send -t 2000 -i /home/ashfame/Dropbox/Ubuntu/icons/network-idle.png "Downtime Alert!" "http://blog.ashfame.com/ is down."
fi
fi
exit
De esta manera, debo verificar la conectividad a Internet solo cuando haya un problema con el código de respuesta de mi blog. Es un poco pesado (ya que no estoy usando ping) pero no debería dar ningún falso positivo. ¿Correcto? Además, ¿cómo puedo aleatorizar el ping a un sitio diferente cada vez, como Facebook, Google, Yahoo, etc.? También (estaba tratando de evitar cualquier E / S) puedo escribir en un archivo de registro mediante el cual puedo verificar el recuento de las comprobaciones de tiempo de inactividad y luego omita más controles hasta que el sitio esté inactivo o provoque controles más largos (10 minutos en lugar de cada minuto). ¿Qué piensas?
fuente
Respuestas:
Comprobando si el sitio web específico está activo
Primero, hay varios servicios de monitoreo en línea disponibles. Para elegir uno, Pingdom incluye una cuenta gratuita para monitorear un objetivo. (Negación: estoy no afiliado con Pingdom de ninguna manera).
En segundo lugar, usar
wget --spider
para tu propio script es una buena idea. Obtendrá algunos falsos positivos cuando su computadora esté inactiva o cuando su servidor DNS no funcione. Verificar el código de retorno es una forma sencilla de implementar esto:Una vez más, hay deficiencias en este enfoque. Si su proveedor ha almacenado en caché su registro DNS, pero el servidor DNS está inactivo, otros no pueden acceder a su sitio a pesar de que la supervisión dice que todo está bien. Puede escribir una solución breve con
host
, por ejemplohost example.com <your dns server IP>
. Eso devolverá un error si el servidor DNS no responde, incluso si OpenDNS o el servidor DNS de su propio proveedor funcionan bien.Comprobar si internet funciona
No hay una manera realmente fácil de manejar esto en todos los casos.
Puede, por ejemplo, ejecutar
ping -c1
en múltiples sitios conocidos (por ejemplo, www.google.com, facebook.com y ping.funet.fi) y verificar los códigos de retorno para determinar si se puede acceder a algún destino. Puede verificar automáticamente el código de retorno utilizando la variable$?
. El parámetro-c1
limita el número de paquetes de ping a uno.Puede encontrar problemas con algunos wifis públicos cuando hay una puerta de enlace de inicio de sesión que redirige todos los pings y solicitudes HTTP. Si es así, puede obtener respuestas de ping y códigos de estado HTTP sin errores, incluso cuando no pueda acceder a ningún otro sitio.
Si desea verificar el estado del cable, puede usar
De salida (extracto):
Sin embargo, esto no indica si realmente tiene conectividad o no, solo si el cable está conectado y algo está en el otro extremo.
fuente
host
(consulta DNS). Es muy rápido también.Estoy usando este método ...
fuente
ping -c 1 8.8.8.8
yping -c 1 www.google.com
. ¿Como es eso?Acabo de usar
que se detiene hasta que el administrador de red presente una conexión de red. Funcionado bien. Puedes hacer otras cosas con él también.
fuente
La verificación para ver si un sitio está activo generalmente se realiza con una herramienta de monitoreo como
nagios
. Esto supervisará continuamente el sitio y puede notificarle sobre interrupciones.Cuando compruebo si Internet está activo desde la línea de comandos, ejecuto varios pasos:
ping google.com
(verifica el DNS y el sitio accesible conocido).wget
ow3m
para buscar la página.Si Internet no está funcionando, diagnostique hacia afuera.
Si Internet está activo pero el sitio está inactivo, verifique si se
w3m http://isup.me/example.com
reemplazaexample.com
con el sitio que aparece inactivo. Utilice wget, lynx o cualquier navegador de línea de comandos que tenga disponible si no tiene instalado el navegador w3m.fuente
if ! wget --spider http:///example.com; then
.[ $? != 0 ]
es la misma que la prueba! command
. wget está documentado para devolver 0 en caso de éxito y no 0 en caso de error. El if se comporta de manera idéntica en cualquier forma que lo codifique. Si wget devuelve un error en una respuesta 200, la prueba fallará de cualquier manera que la escriba. Lo mismo si devuelve 0 para un código de respuesta que no sea 200.Este es el script de shell que estoy usando para probar la conectividad a Internet:
alarm.sh
Deberá instalar curl y mpg321
Necesitará un archivo de sonido .mp3 renombrado como alarm.mp3 en la misma carpeta si desea una funcionalidad de alarma audible. Finalmente configure la URL del sitio web y egrep a sus necesidades.
fuente
egrep -q
lugar deegrep ... > /dev/null
while
bucle?alarm.sh
en el wd, por lo que si llama a este script desde un directorio diferente, se producirá un error, o si hay un script llamadoalarm.sh
en el wd, lo llamará en su lugar. Entonces esa es una mala práctica. En su"$0"
lugar, podría usar , pero unwhile
bucle sería mejor.Comprobar si internet funciona
De salida (extracto):
Sin embargo, como lo mencionaron otros, esto no indica si realmente tiene conectividad o no. P.ej. Podría estar conectado al enrutador y el enrutador no está necesariamente conectado a internet.
fuente
nm-tool
se ha eliminado en Ubuntu 15.04+, pero puede usarlonmcli
en su lugar. Por ejemplo[[ $(nmcli -f STATE -t g) = connected ]]
nmcli -f STATE -t nm
lo bueno es ser independiente de los sitios web!nm-tool
ynmcli
le dirá solamente si está o no está conectado al local de la red, es decir, si está o no está conectado a su casa wifi / ethernet. No le dirá si puede alcanzar algo más allá de su red local, es decir, Internet.Estoy usando este método:
Intentará conectarse a un sitio web conocido y, si puede conectarse a él, asumiremos que existe Internet.
fuente
Necesitaba ayuda con la misma pregunta, y obtuve mi respuesta de esta manera:
fuente
nm-online
comando ... Devolverá 0 si todo está bien. Usual en todas lasUNIX
conchas.Comprobar si Internet funciona no es tan trivial. ping es ICMP, por lo que podría funcionar incluso si el proxy web está inactivo. Algo similar ocurre con el DNS si prueba con una IP.
Como mi conexión a Internet es inestable, creé este script ( basado en este ) que hace que suene un suave acorde para llamarme, y también utiliza Ubuntu para notificar cuando vuelve la conexión a Internet:
fuente
Estaba buscando una secuencia de comandos que probara continuamente mi conexión a Internet, que se iniciaría cada vez que mi servidor estuviera encendido e hice esto:
Primero, instala fping
Cree un script de inicio en la carpeta /etc/init.d con el siguiente contenido (lo llamé testcon)
Cree un script en la carpeta /etc/init.d con el siguiente contenido (lo llamé testcond)
Luego ejecuto los siguientes comandos para agregar a la puesta en marcha:
Reiniciar
fuente
Mi
Broadcom BCM94331CD
chip me enfrentó a excreciones aleatorias de conexiones Wi-Fi . Diseñé el siguiente script bash (bucle infinito) comprobando cada segundo si la conexión Wi-Fi a Internet está en funcionamiento. Otra línea de comando propuesta aquí esperará al menos 5 a 10 segundos antes de cerrar con un estado, es decirping
. Mientras tanto, estoy buscando una solución definitiva también.De los resultados en askubuntu, tendré que purgar el
bcmwl-kernel-source
paquete mientras lo usofirmware-b43-installer
yb43-fwcutter
.Gracias a todos por sus sugerencias (arriba).
Este script debe agregarse en los Programas de inicio y no necesita
super user
privilegios para ejecutarse también.fuente