Script monitorización estado de web y aviso por Telegram, con bash

Por Manolo Gómez | March 30, 2022

Cuando no dedicamos a programar aplicaciones web, es vergonzoso, que te tenga que llamar un cliente para decirte que su aplicación o pagina web no funciona.

Monitorización con bash titulo

Un programa que corren en internet puede dejar de funcionar por muchas razones, se ha caído el servidor, a caducado del certificado, a recibido un ataque… Una buena solución es adelantarnos a esto y generar un sistema que nos avise de los problemas.

Aquí en este post explico el sistema mas sencillo para hacerlo un script en bash de pocas lineas que se ejecuta con un crontab a intervalos regulares de tiempo en mi caso cada 15 min y comprueba que una lista de direcciones web están o no en funcionamiento, en caso de que alguna no responda enviá un mensaje a telegram avisado de esto.

El script yo lo he llamado check_urls.sh


#!/bin/bash

cd "$(dirname "$0")"

file_log="history_check.log"

domains=(
    'https://creawww.com/'
    'http://www.konstruir.com/'
    'https://manolog.es/'
    'https://noescorrectoparatenererror.es/'
    )

now="`date +%Y%m%d_%H:%M`"
message=""

for url in "${domains[@]}"
do
    status_code=$(curl --write-out %{http_code} --silent --output /dev/null $url)
    if [ ${status_code} == "200" ]
    then
        echo "$url OK -> $now"
    else
        message="$url KO -> $now"
        echo $message
        echo $message >> $file_log
        sh bot_telegram.sh "$message"
    fi
done 

por comentar las lineas mas significativas:

  • “$(dirname “$0”)” de mueve a la carpeta del de script
  • domains es un array de dominios a comprobar
  • un bucle que recorre el array comprueba con curl si una llamada a la url tiene estado 200 en caso negativo lo anota en un archivo logs y envía un mensaje a Telegram

El envío de mensajes por Telegram se realiza mediante otro archivo ssh situado en la misma carpeta que se explica en un post anterior

Crear un sencillo bot de Telegram para notificar con Bash