El código es una implementación a un proceso cliente servidor que no está corriendo como debiera; el soporte del producto parece que hace oídos sordos, por lo que estoy decidido a crear un script en Perl que permitiese controlar las anomalías de su comportamiento (cuelgues inesperados y por tanto reinicio de las plataformas)... para ello tengo este código montado... pero...
No me sale, no me sale...
Esta es la secuencia de pseudo código que me he creado...
Leo de un fichero de logs (servicio.log), si la última línea es
- Código: Seleccionar todo
"waiting for connect your client to Main server"
es que está corriendo, no hago nada; si leo comunicación perdida
- Código: Seleccionar todo
Connection lost with the Main Server at Fri Oct 10 09:44:3
entonces reinicio Client Server.
1. Cada 5min chequeo dentro del fichero servicio.log si tengo en la última línea:
Using perl Syntax Highlighting
$ready = "waiting for connect your client to Main server"
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
si contiene $ready, hago una INSERT en eventos en mi base de datos local, añado ID, TEXT, NODO, TTIME
Using sql Syntax Highlighting
INSERT INTO eventos (ID, TEXT, NODO, TTIME) VALUES ( DEFAULT autoincrement, "cliente ok", NODO_1, TTIME);
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
$my contiene
Using perl Syntax Highlighting
$contiene = SELECT FETCH SQL
if ($contiene =~ /waiting for connect/)
{ print ("Estoy corriendo") exit;}
else { kill $SERVER_PID }
if ($contiene =~ /waiting for connect/)
{ print ("Estoy corriendo") exit;}
else { kill $SERVER_PID }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Y salgo del proceso.
Si por el contrario la última línea del log (servicio.log) contiene.
- Código: Seleccionar todo
Connection lost with Main Server at Fri Oct 10 09:44:3
entonces reinicio Cliente -> grabando a fichero LOG de reinicio con hora de reinicio.
Al minuto puede darse la condición de que se restablezca:
Puedo leer en el log:
- Código: Seleccionar todo
Connection restablished with Main Server at Tue Feb 03 13:34:08 CET 2009
¿¿CÓMO ACTUO?? ¿Grabo en un fichero que estoy Ok? ¿Mando al servidor principal que reinicie el nodo cliente?
Y salgo
2. Chequeo Main Server, miro: /opt/logs/servicio.log
Si contiene en la última línea
- Código: Seleccionar todo
Connect your client to Main Server
esta corriendo perfectamente no hago nada -> SALGO
Recojo la información recibida de los nodos clientes...
{FALTARÍA IMPLEMENTAR UN INTERVALO DE TIEMPO DE RECEPCIÓN}
Envió a las 10:05 -> ¡¡Debo haberlo recibido a las 10:07 máximo!!
10:10 -> Debo haberlo recibido a las 10:12...
Si mensaje contiene "No response from the Primary Server as it may not be running" lanzo por protocolo RSH un kill del $Cliente_PID.
Si contiene "waiting for connect" no hago nada y salgo...
....
A ver si alguien puede echarme una mano, prometo esforzarme e involucrarme más en crear scripts con Perl, veo que es muy potente y puede crear muchas cosas...
Gracias por leeros este tocho
A ver si puedo aprender de vosotros y a la vez dar ejemplo a otros que se encuentren en situación parecida ¡Un saludo!