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.-
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
#!/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 |