Apuntes mientras aprendo sobre software y computadoras.

Linux

Cómo saber si un sitio web esta en linea usando Bash

En este apunte ultra rápido estoy investigando cómo revisar si un sitio web esta en linea usando Bash.

La idea central es conocer si una página web se encuentra sin conexión o no.

Tal vez estoy intentando visitar ese sitio y no tengo respuesta. Puede ser que necesito iniciar una descarga o realizar alguna tarea de mantenimiento, y me va a servir conocer cuando el sitio va a volver a estar disponible.

Para realizar esto voy a valerme de el lenguaje de programación Bash, mi sistema operativo Linux y el comando Ping.

Ping hacia el otro lado

El objetivo de este breve código va a ser ejecutar cada dos minutos el comando Ping.

Y el comando va a repetirse cada dos minutos hasta que el sitio web que estoy testeando se encuentre en linea.

Según el manual de instrucciones:

NAME
ping – send ICMP ECHO_REQUEST to network hosts

manual de ping

Bueno… eso es algo confuso.

Si bien entiendo, Ping comprueba la comunicación entre dos equipos. En un ultra resumen, se envía un “mensaje” (un paquete de información) de un lado al otro, y se espera a que regrese la respuesta.

Sobre el tiempo que tarda en ir y volver el mensaje, entre otras cosas, se obtiene información del estado de la conectividad.

Dicho de otro modo, si no existe acuso de recibo del mensaje posiblemente no hay nadie del otro lado y el sitio que testeamos no funciona. Y si la respuesta tarda más de lo razonable en llegar, existe algún problema distinto a diagnosticar.

Esto quiere decir que con este comando:

ping -c 1 www.ejemplo.com

Me alcanza para cómo se encuentra la conectividad entre el sitio “ejemplo.com” y mi equipo. La opción “-c 1” hace que Ping envíe solamente un paquete, puedo modificar el “1” por la cantidad de paquetes que deseo enviar para hacer la prueba.

Sin embargo quiero todavía agregarle un poco más de funcionalidad.

El código

Me interesa hacer que el comando Ping se ejecute cada dos minutos o hasta que reciba una respuesta de que se puede comunicar con el sitio que estoy testeando.

Aunque se podría utilizar al revés, y hacer que se ejecute cada cierto intervalo de tiempo siempre que tenga una respuesta positiva. De ese modo, cuando el programa me avise que se terminó, voy a poder darme cuenta que ese sitio web se encuentra fuera de linea.

Comparto el código primero el código del programa, por si te interesa empezar a utilizarlo o por si querés revisarlo. Luego voy a repasarlo más en profundidad.

#!/bin/bash

# Programa para revisar si un sitio web se encuentra en linea o no usando Ping cada tres minutos


function ping_website {
    local website="$1"
    local count="$2"
    if ping -c $2 $1 &> /dev/null; then
        echo "$website se encuentra disponible"
        return 0
    else
        echo "$website no se encuentra disponible"
        return 1
    fi
}

INTERVAL=180 # tres minutos

while ! ping_website $1 $2; do
    sleep $INTERVAL
done

Cómo funciona

El programa está dividido en dos partes.

En un primer momento, se encuentra el bloque de código dedicado a utilizar el comando Ping:

function ping_website {
    local website="$1"
    local count="$2"
    if ping -c $2 $1 &> /dev/null; then
        echo "$website se encuentra disponible"
        return 0
    else
        echo "$website no se encuentra disponible"
        return 1
    fi
}

Lo que hace esta función es probar ping en base a dos variables que voy a pasar al invocar el programa. Esas variables son $1 (que luego voy a pasar como la dirección del sitio) y $2 (que va a ir en luga de la cantidad de paquetes que quiero enviar).

Si puede comunicarse, devuelve una respuesta de salida 0. Y al no poder comunicarse, la respuesta de salida es 1.

Luego sigue la parte que repite en código en intervalos:

INTERVAL=180 # tres minutos

while ! ping_website $1 $2; do
sleep $INTERVAL
done

Esto consiste en un loop, que por medio del comando “sleep” se repite a intervalos de 180 segundos. El loop se mantiene mientras que la función de una respuesta de 1, es decir que no encuentra respuesta con el sitio revisado.

Ahora, al momento de llamar al script, lo hago de esta forma:

./programa.sh sitioprueba.com 1

De ese modo le paso las dos variables que el programa se encuentra esperando.

Conclusión

Es te apunte rápido es para analizar cómo saber si un sitio web esta en linea usando Bash.

Lo hago más que nada como para mantener la constancia de seguir aprendiendo cosas nuevas, pero espero que el material te sirva de utilidad. Siempre es posible expandir esto para agregarle nuevas herramientas.

Si encontraste algún error o tenés un comentario, me gustaría leer tu opinión.

La seguimos en el próximo apunte.

Recursos:

Leave a Reply