Cron shell script para reiniciar Tomcat

Tengo algunos problemas con un server de aplicaciones Tomcat. Antes de que pueda llegar a solucionar el problema con la aplicación Java, necesito crear un script cron shell para reiniciar el server.

Pensé que esto sería un esfuerzo sencillo, pero la única complicación es que la causa raíz hace que Tomcat no se apague de forma limpia después de ejecutar ./shutdown.sh. El process sigue abierto cuando ejecuto ps auwwx | grep java | grep org.apache.catalina.startup.Bootstrap

Matar -9 el process (sí, eso es malo, pero las cosas vienen hasta bien – hasta ahora;)) y puedo reiniciar el server correctamente.

No soy un experto de la escritura de la shell (o principiante para esa materia) y necesito una cierta ayuda con "encuesta" por un período del time hasta que el command del ps arriba devuelva null. Después de un período de votación haría una matanza, luego un reinicio.

Este es un esquema aproximado de un guión que haría lo que quiera. Por supuesto, usted tendrá que la carne hacia fuera y usted puede cambiar el argumento al sleep (demostrado aquí como cinco segundos).

 #!/bin/bash while ps | grep | grep > /dev/null do sleep 5 done kill restart 

Puede combinar los dos greps en uno utilizando una expresión regular si es necesario. Nota: cuando usted está haciendo este tipo de cosas, a veces puede get falsos positivos cuando grep encuentra (aunque sus dos greps evitar esto). Para evitarlo, puedes hacer grep [s]omething que encuentre "… algo …" pero no "grep algo" en la salida de ps .

Lo que estás haciendo es un parche para no manejar las excepciones de Java correctamente. Entiendo que quiero hacer los reinicios, de verdad, lo hago. Si se trata de un proyecto a largo ploop o de producción, el mundo será un lugar mejor si simplemente captura y maneja los errores.

(Tomcat muere si algún error lo hace todo el path de vuelta a la stack de llamadas.)

Tuvimos que resolver este problema exacto mientras desarrollábamos nuestro producto Tcat Server para dar soporte a reinicios fiables.

Puede download Tcat Server y echar un vistazo a tcat6.sh para get ideas sobre cómo lo solucionamos. Si tiene preguntas específicas, no dude en publicar aquí.

Tcat Server es en realidad 100% vanilla Tomcat con características adicionales para la configuration mgmt, deployment y diagnóstico – le encantaría download y ver si cumple con sus necesidades. Su libre de usar en el desarrollo, y se puede download desde: http://www.mulesoft.com/download-tcat-server-enterprise-tomcat . Si no desea usar la console web, puede usar curl para invocar a Tcat Server REST API para hacer las reinicio.

Espero que esto ayude.

Descargo de responsabilidad: Trabajo para MuleSoft y estoy muy involucrado con Tcat Server.

Los serveres de aplicaciones como Tomcat no les gusta si las aplicaciones web se comportan mal (hacer cosas desagradables con cargadores de class, pérdidas de memory, iniciar hilos no daemon, etc.) para que no se apaguen correctamente cuando se les pida.

En primer lugar, para reiniciar el Tomcat de la manera más difícil, puede ser lo "correcto" para hacer para mantener las operaciones en funcionamiento hasta que la aplicación se puede arreglar. Lo siguiente es boost el nivel de logging y comprobar los files de logging para lugares obious como OutOfMemoryErrors, etc Si tienes suerte, la aplicación web utiliza el logging y puede señalar lo que está haciendo.

Lo siguiente es adjuntar un agente de monitoreo (visualvm.dev.java.net está haciendo un gran trabajo) a la instancia de Tomcat. Debe habilitar JMX en el lado del server antes de poder conectarse a él remotamente. Si utiliza Suse Linux o similar, no olvide configurar el nombre de host del server rmi como propiedad del sistema. Observe el consumo de memory, tome volcados de hilo cuando los serveres cuelgan. Cuando emite una request de shutdown.sh con shutdown.sh y el server no se cierra correctamente, lleve un volcado de subprocess y vea qué subprocesss se están ejecutando y en qué class / método están en este momento.

Si hay algo mal con la memory, puede intentar ajustar la configuration del recolector de basura para la JVM o utilizar otra JVM como JRockit. El uso de un GC más agresivo puede ayudar.

Otra forma es evitar que la aplicación haga lo que hace mal: utilice un Administrador de security y modifique el file de políticas de security hasta que la aplicación esté funcionando. Puede revelar que la aplicación está haciendo algo que no debería hacer en primer lugar.