BASH – Monitoreo respuestas Web Services, con archivo de bloqueo.-

El siguiente SCRIPT sirve para verificar las respuestas de Web Service que atiende una granja de servidores. Este SCRIPT se puede lanzar con el comando “NOHUP” en segundo plano, para que siga ejecutándose independiente de si cerramos la sesión. Realiza lo siguiente :
1.- La variable “lockfile” corresponde a un archivo de bloqueo para evitar que el programa se ejecute más de una vez.-
2.- Si el programa no se esta ejecutando, crea el archivo de bloqueo con el PID de ejecución del SCRIPT.-
3.- Con la instrucción “trap”, eliminamos el archivo de bloqueo, esto si se detiene el SCRIPT por algún motivo.-
4.- Para este ejemplo, tenemos una granja de servidores de nombre NEPTUNO, en que tenemos 16 servidores de nombre : neptuno203, neptuno205, neptuno206, etc…
5.- Ejecutamos un bucle for infinito.-
6.- La variabele “log” corresponde al archivo de LOG, que registra los reinicios realizados.-
7.- Un ciclo for para iterar cada servidor.-
8.- Las variables “consult1” y “consult2” corresponden al resultado de la consulta del Web Service, mediante el comando “curl”, buscando si respondió con algún error.
9.- Si la respuesta es correcta, con el comando “continue”, salta a la siguiente iteración del bucle.-
10.- Si alguno de los Web Sevice responden con error, procede a lanzar el script que reinicia el puerto con problemas y procede a registrar la acción en el archivo de LOG.-
11.- Si el programa ya esta en ejecución al tratar de lanzarlo una segunda vez. El programa lo informa y le indica como cerrarlo, haciendo un “kill” al pid indicado y le indica que debe eliminar manualmente el archivo de bloqueo. Una vez realizado esto, se puede volver a ejecutar el SCRIPT nuevamente.-

#!/bin/bash
lockfile=/usr01/home/neptuno.lock
if ( set -o noclobber; echo "$$" > "$lockfile") 2> /dev/null;
then
trap 'rm -f "$lockfile"; exit $?' INT TERM EXIT
for (( ; ; ))
do
servidor="203 205 206 207 209 210 211 212 301 401 403 404 405 406 407 508"
puerto="1124"
FECHA=`date +%m%Y`
log=/usr01/home/chequeo/logs/neptuno$puerto-$FECHA.log
for servers in $(echo ${servidor}) ; do
    neptuno=neptuno$servers
    consult1=`/usr/local/bin/curl -s http://$neptuno.cur.cl:$puerto/WSOL/serv/wsRConsulta?method=getState | grep -i error`
    consult2=`/usr/local/bin/curl -s http://$neptuno.cur.cl:$puerto/WSOL/serv/wsREnvio?method=getState | grep -i error`
    if [ "${consult1:-NULL}" = "NULL" ] &&  [ "${consult2:-NULL}" = "NULL" ]; then
        continue
    else
      bash reinicia_tomcat.sh $neptuno  1> /dev/null 2> /dev/null
       echo "$neptuno $puerto `date +%d-%m-%Y` `date +%H:%M:%S`" >> $log
    fi
done
done
else
echo ""
echo "      Ya hay otro proceso de este script ejecutandose"
echo "         corriendo con el PID: $(cat $lockfile)"
echo ""
echo "   Para lanzar un nuevo proceso dewbe ejecutar los siguientes comandos : "
echo ""
echo "                      kill -9 $(cat $lockfile)"
echo "                  rm -rf $lockfile"
echo ""
echo ""
fi
Esta entrada fue publicada en Unix - Linux. Guarda el enlace permanente.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.