[SOLUCIONADO] Ayuda con código Bash - Reiniciar servidor de Tomcat

Iniciado por H4R4K1R1, Enero 10, 2019, 10:59:17 AM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Buenos días compañer@s de Underc0de,

Os comento mi situación...

Recientemente se me ha pedido la siguiente tarea:

- Tenemos un servidor de TOMCAT que a veces se cae por distintos procesos...
- La forma de detectarlo es mediante un comando "curl -v http://url" que te da una respuesta si está bien, si no lo está, te da otra distinta...
- Si la respuesta no es esa, el servidor debe de levantarse nuevamente...

La idea es, hacer un script que levante ese servidor cuando el status sea distinto de X... Poniendo por ejemplo, que si se detecta que la respuesta es durante 5 segundos distinta, se levante nuevamente..

No tengo mucha idea de como podría hacer ese código... Agradecería enormemente si alguien pudiese guiarme con algún ejemplo para ello.

He sido incapaz de encontrar otro código que poder reutilizar, y de cero no sabría hacerlo...

Mil gracias compañeros :)

Enero 10, 2019, 03:24:58 PM #1 Ultima modificación: Enero 10, 2019, 04:42:05 PM por Solid Water
Por lo que dices creo que estas en linux.
Casi todos los linux traen perl instalado.
Solo abres el nano o el vim y creas un script como este con extension .pl
para ejecutarlo utilizas el comando perl nombre_de_archivo.pl

Código: perl

#!/usr/bin/perl

use strict;

my $respuesta = qx("curl -v http://url");

while($respuesta ne "cadena de salida certera"){

     system("comando que levanta el server");
     my $respuesta = qx("curl -v http://url");
}

exit;


Hay otra forma de guardar la salida del comando en lugar de qx que si no me equivoco es utilizando estas comillas ´´.
Me gustaría darte más información pero no tengo mi web online donde tengo mis códigos.
Si no te gusta que sea tan forzoso y ejecute el comando mil veces solo cambia el while por un if, y programalo No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

También por si la salida no es siempre la misma pero es parecida, puedes utilizar expresiones regulares para saber si la cadena de resultado contiene X palabra.

Saludos,

@No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Recomendaciones antes de seguir leyendo:

- como estas corto de tiempo (supongo), tienes que aprender lo más básico de python
- crear un archivo bash con las instrucciones o comandos para encender el servidor nuevamente
- aprender lo más básico de la librería urllib, time, os y thread en python

Ahora:

Crearemos un script en python usando la librería urllib, time, os y thread, donde primero crearemos una función donde contendrá un bucle que se actualizará cada 1 segundo (aunque depende también de como lo coloques), donde verificará en ese periodo de tiempo el código de la respuesta http usando urllib (urllib.urlopen("http://url").code), generalmente la respuesta normal sería 200 si es diferente entonces que ejecute el archivo bash donde contendrá las instrucciones y por último con thread ejecutamos la función en un hilo independiente (thread no es necesario pero puedes optar por el en caso de que quieras agregar más funciones).
PGP :: <D82F366940155CB043147178C4E075FC4403BDDC>

~ DtxdF

Primero que nada,

Mil gracias a @No tienes permitido ver los links. Registrarse o Entrar a mi cuenta y a @No tienes permitido ver los links. Registrarse o Entrar a mi cuenta por las respuestas :)

Pude ponerle solución a esto investigando poco a poco las dudas que me iban surgiendo, aquí dejo parte de la solución:

Código: bash

webserv="http://server1"
webserv2="http://server2"
keyword="X" #el mensaje que tiene que dar
NUMFALLOS=`cat /tmp/contadorErrores.txt`
curl1=$(curl -s --max-time 5 ${webserv} | grep -c "${keyword}")
curl2=$(curl -s --max-time 5 ${webserv2} | grep -c "${keyword}"
)
exec >>/var/log/webserv-status.log 2>&1 #Escribe en un log todos los "echo" que salgan.

fecha=$(date +"%y-%m-%d %H:%M")
echo $fecha
echo ${webserv}
echo "El 1 indica que el servidor esta corriendo / El 0 indica lo contrario"
echo "El estado del server1 es el siguiente: " ${curl1}
echo "El estado del server2 es el siguiente: "${curl2}
echo "El numero de fallos es: ${NUMFALLOS}"
if [[ ${curl1} -gt 0 ]] && [[ ${curl2} -gt 0 ]]
        then
        echo "$fecha :   -   La URL $webserv funciona como se esperaba"
            NUMFALLOS=$(( ${NUMFALLOS}*0 ))
            echo $NUMFALLOS >/tmp/contadorErrores.txt
        else
            NUMFALLOS=$(( ${NUMFALLOS}+1 ))
            echo $NUMFALLOS >/tmp/contadorErrores.txt
        fi

        if [ $NUMFALLOS == 3 ]
        then
        /etc/init.d/tomcat55 restart
        echo"$fecha :   -   Error: Se procedera a reiniciar el servidor de Tomcat."
NUMFALLOS=$(( ${NUMFALLOS}*0 ))
echo $NUMFALLOS >/tmp/contadorErrores.txt

fi