Hola a todos,foto de Eloy Mier Pérez

hoy vamos a buscarnos la vida para intentar hacer un pequeño script en Linux que nos valide que nuestro site esta disponible.

¿Por que vamos hoy a hacer esta cosilla tan rara?, bueno pues no se si alguno de los lectores se habrá dado cuenta, supongo que si, de que estos últimos dias en diversas ocasiones el site a la hora de conectar muestra la siguiente imagen:

 

 

Como se puede apreciar, el problema es de conectividad con el sistema gestor de base de datos, en este caso un mySql. La aplicación no ha sufrido cambios en su configuración y por lo tanto pienso que el problema es del proveedor de los servicios de hosting que por alguna razón que no alcanzo a comprender tiene problemas con la máquina destinada a las bbdd de las aplicaciones.

Bien en estas condiciones, y como ya he hablado con ellos en diversas ocasiones por este problema, me decidí a hacer de alguna forma «algo» que pueda controlar el estado de mi hosting, concretamente de mi WordPress.

Tengo por aquí por casa siempre varias máquinas siempre encendidas, cada una de ellas con su cometido. En una de ellas que es la que mas ligera esta (carga) y que corresponde con el cache de DNS primario de mi LAN, decidi intentar programar alguna cosa para que hiciese el chequeo cada 5 minutos.

La cosa finalmente acabo siendo un script, y he programado su ejecución reiterada con crontab.

Inicialmente había pensado en programar la ejecución con at, pero no se pueden programar tareas repetitivas, o por lo menos yo no he sido capaz de encontrar información al respecto.

Bueno pues sin mas dilación paso a explicar el script que me he hecho para la verificacion del estado del site:

eloy@ubuntuEEEbox:~$ cat Eloy-MPCheckDBerror.sh

if (wget -t 2 -b -o tmp -O - http://eloy-mp.com) then
# Damos tiempo al server a retornar la página
sleep 5
if (grep 'ERROR 500: Internal Server Error' tmp) then
echo `date`-\>Ejecucion verificacion site Eloy-mp.com ERROR DETECTADO.....!!!!!!!!
fi
# eliminamos el fichero temporal
rm tmp
fi

Subo el script para ahorraros trabajo en el caso de que querais usarlo :github

El script es autoexplicativo, pero vamos, simplemente conecta con la dirección que le damos para la lectura de la página. Sobre la respuesta del site hace una búsqueda por si aparece la cadena error 500 que es la que me interesa por el momento.

La ejecución del script con una respuesta correcta del servidor se corresponde con la siguiente salida:

 

 

La ejecución del script con una respuesta de error del servidor se corresponde con la siguiente salida:

 

 

Bien, pues una vez concluido el script ya solo queda pensar en 2 asuntos necesarios y relacionados con la ejecucion del mismo:

  1. ¿Como ejecutarlo periódicamente?
  2. ¿Cómo vamos a obtener la salida?¿como nos va a informar el sistema sobre los errores detectados?

Bueno, pues el punto 2 se responde mediante el 1, me explico. Como he comentado con anterioridad, inicialmente había pensado en usar el comando atpara la programación del script, lo descarté debido a que la programación es única en un punto de futuro y no se puede iterar sobre la misma.

A continuación pensé en crontab, que si sabia que cumplía mi necesidad, pero tenia idea de que era mas complicado su uso. Nada acertada mi pre apreciación inicial.

No es objetivo del presente articulo entrar en las minucias de crontab, simplemente decir que para lograr programar la ejecución del script debemos indicarle a «alguien» que es lo que queremos que haga y cuando queremos que lo haga. Para ello usando el comando crontab -e se abrira un editor que muestra la ubicación en donde debemos realizar dicha especificación. Para los mas avispados de la clase solo indicar que el fichero resultante se guarda en /var/spool/cron/crontabs y dicho fichero es individual por usuario. Si ejecuto el comando en mi máquina, que ya tiene corriendo el script puedo ver la siguiente pantalla:


En tu caso, si no tienes nada programado verás el editor abierto solo con la primera de las lineas. La segunda de las lineas significa lo siguiente:

  • Los primeros números separados por comas son los minutos: 05,10,15….55
  • El primer * significa: ejecución a todas las horas
  • El segundo * significa ejecución todos los días del mes
  • El tercer * significa ejecución para todos los meses
  • El cuarto * significa ejecución todos los días de la semana
  • El ultimo parámetro es la ruta del script que quiero ejecutar, ni mas ni menos.

Al guardar el fichero el sistema nos indicará si hay algún error en la sintaxis, obligando a corregirlo de nuevo. El sistema no permite que guardes un fichero con errores.

Bueno, pues solo nos queda dar respuesta al punto 2 ¿cómo recibimos esa informacion?. Si echamos un vistazo en la página man de cron podremos leer que toda la salida resultado de un comando se envia por mail al propietario de la tarea. Por lo tanto, y centrados en el problema planteado, los comandos ECHO que aparecen en el script son los que recibiremos, además de la salida propia del comando wget.

Aqui se puede apreciar el aviso que recibimos del sistema:

Y aqui el mail recibido, tanto si hay como si no hay error:

Un saludo a todos y hasta la próxima.

Comments (1)

Marvell

Oct 21, 2011 at 4:26 PM

Cojonudo el articulo Marvell !!!

You must be logged in to post a comment.