bash

bash

Queremos monitorizar el servicio de cron en Linux, para un cron concreto. Dicho cron se lanza cada 15 minutos y queremos asegurarnos de que el cron lo ejecuta (bien o mal nos da lo mismo). El metodo para tener una notificacion si el cron no se ha ejecutado es la siguiente.

Primero instalamos el cron que queremos monitorizar, y le forzamos a escribir un fichero de log, con la informacion que queramos (lo que nos interesa es que se escriba en el mismo momento en que se ejecuta el cron).

El siguiente paso es crear el siguiente script


vi /home/user/scripts/cron/log/check_cron.sh

#!/bin/bash

file="/home/user/scripts/cron/log/salidaCron.`date +%d%m%g`.txt"
limite="/home/user/scripts/cron/log/limite"
touch -d '-16 minutes' $limite
if [ $limite -nt $file ]; then
  echo"----------------------------------------------------------------------" >> /tmp/timestamp
  echo "La fecha de modificacion del log es: " >> /tmp/timestamp
  stat $file | grep Modify| cut -d: -f2,3,4| cut -d. -f1 >> /tmp/timestamp
 echo "" >> /tmp/timestamp
  echo"----------------------------------------------------------------------" >> /tmp/timestamp
cat   /tmp/timestamp|  mail -s "Fallo de ejecucion de Script" user@dominio.com
fi

Este script hace lo siguiente:
-Crea un fichero con el comando touch con la hora actual menos el numero de minutos que queramos. En nuestro caso le ponemos 1 minuto mas que la frecuencia de ejecucion del cron que queremos monitorizar.
– Compara lel timestamp del fichero del limite que hemos marcado para comprobar el servicio, con el log que escribe el servicio instalado en el cron.
– Si la fecha del log supera el limite que hemos marcado, quiere decir que el cron se ha parado, y nos notifica al correo enviando el texto que hayamos definido.
– En nuestro caso veremos que el correo se manda a una hora superior a los 16 minutos de limite que hemos marcado, y con ello el fallo del servicio.
-Debido a que el script solo manda el correo ante fallo, lo instalaremos en un cron con la frecuencia que queramos. No demasiado alta porque si es asi, nos notificara con retraso.

Adjunto los crones como los tengo instalados:

*/15 * * * * /usr/bin/java -jar /home/user/scripts/cron/dist/.hagoloquesea.jar >> /home/ulysse/scripts/cron/log/salidaCron.$(date +\%d\%m\%g).txt
*/5 * * * * /home/user/scripts/cron/log/check_cron.sh