Verificar que mis webs están online y enviar un mail

Verificar que mis webs están online y enviar un mail.

Si existe una preocupación constante para un sysadmin, es que los sitios web del servidor que maneja siempre estén online. Una caída de un par de horas puede suponer un gran perjuicio económico.

En este articulo vemos un script bash que verifica que los sitios web incluidos en una lista están operativos (respuesta 200), si no es así, enviara un mail al listado de correos electrónicos que hayamos insertado.

 

Verificar que mis webs están online y enviar un mail

Como ejemplo vamos a trabajar sobre un directorio al que hemos denominado scripts. En el directorio creamos un archivo para los sitios web, y otro para los mails que recibirán los avisos.

# Inserta un sitio por linea.
# La ultima linea debe estar en blanco.

nano websites.lst

# Inserta un sitio por linea. 
# La ultima linea debe estar en blanco. 

nano emails.lst

Introduce los sitios y los mails en los archivos correspondientes, los guardamos y cerramos el editor.

Ahora creamos el script bash:

nano verificaweb.sh

Copia y pega lo siguiente…
#!/bin/bash
#

WORKSPACE=/scripts
# lista de sitios web. cada sitio en una línea. Dejar una línea vacía al final.
LISTFILE=$WORKSPACE/websites.lst
# Enviar correo en caso de servidor caído. Dejar una línea vacía al final.
EMAILLISTFILE=$WORKSPACE/emails.lst
# Temporary dir
TEMPDIR=$WORKSPACE/cache

# `Quiet` Es true cuando ejecuta crontab; muestra la salida cuando se ejecuta manualmente.
# Establecer THIS_IS_CRON=1 en crontab -e.
# Si no se establece reenviara el mail otra vez.
if [ -n "$THIS_IS_CRON" ]; then QUIET=true; else QUIET=false; fi

function test {
  response=$(curl -L --write-out %{http_code} --silent --output /dev/null $1)
  filename=$( echo $1 | cut -f1 -d"/" )
  if [ "$QUIET" = false ] ; then echo -n "$p "; fi

  if [ $response -eq 200 ] ; then
    # sitio web online
    if [ "$QUIET" = false ] ; then
      echo -n "$response "; echo -e "\e[32m[ok]\e[0m"
    fi
    # borrar el archivo .temp 
    if [ -f $TEMPDIR/$filename ]; then rm -f $TEMPDIR/$filename; fi
  else
    # sitio caído
    if [ "$QUIET" = false ] ; then echo -n "$response "; echo -e "\e[31m[DOWN]\e[0m"; fi
    if [ ! -f $TEMPDIR/$filename ]; then
        while read e; do
            # usar el comando mail
            echo "$p SITIO CAÍDO" | mailx -s "$1 SITIO CAÍDO ( $response )" $e
            # usar el comando mail
            #mail -s "$p SITIO CAIDO" "$EMAIL"
        done < $MAILLIST
        echo > $TEMPDIR/$filename
    fi
  fi
}

# main loop
while read p; do
  test $p
done < $LISTFILE

Guarda el script y cierra el editor nano.

Concedemos permisos.

chmod +x verificarweb.sh

Lo normal es que este script opere mediante una tarea cron, de todas formas si lo quieres ejecutar de forma manual, actúa como te indico a continuación.
./verificaweb.sh

o

bash verificaweb.sh

Ejecutar el script con una tarea cron cada 30 minutos. La ruta del cron puede variar dependiendo de tu distribución linux.
nano /etc/crontab

Agregamos la tarea (no te olvides de THIS_IS_CRON=1).
THIS_IS_CRON=1
*/30 * * * * /path/to/verificaweb.sh

Solo nos falta reiniciar el demonio cron, tienes dos opciones de comando dependiendo de tu distribución linux.
service cron restart

o

service crond restart

 

Espero que este articulo te sea de utilidad, puedes ayudarnos a mantener el servidor con una donación (paypal), o también colaborar con el simple gesto de compartir nuestros artículos en tu sitio web, blog, foro o redes sociales.

 

Agregar comentario