2012-03-31 20 views
14

En los últimos 10 años más o menos, tuve la oportunidad de implementar aplicaciones web en un tomcat innumerables veces. También escribí varias secuencias de comandos tratando de hacerlo automáticamente, pero nunca logró automatizarlo por completo.Implementar una guerra para tomcat

Aquí está el problema. Estoy intentando desplegar una nueva guerra, con el mismo nombre que una guerra existente en las páginas web de mi gato.

Opción 1: El enfoque ingenuo: simplemente copia la guerra y espera a que actualice el directorio explotado. Esto a veces funciona. Muchas veces: el directorio explotado no se actualiza en un tiempo razonable.
Opción 2: El enfoque directo: detenga el tomcat, elimine todas las guerras y los archivos temporales. copia la guerra y comienza el gato. Esto generalmente implica detener al gato, esperar un momento y luego verificar si el proceso aún está vivo y matarlo.
Opción 3: El enfoque manual - Esto podría sorprender, pero encontré que funciona muchas veces - copie la guerra, espere a que se actualice el directorio explotado, y una vez que lo haga - reinicie el tomcat. si no lo hace, puede intentar eliminar los archivos de trabajo temporales, y eso a veces ayuda.

También probé muchas opciones - con diferente orden y subconjunto de las acciones - reiniciar, detener, eliminar guerra, eliminar explosionado, eliminar el contexto localhost, eliminar el directorio de trabajo localhost, copiar guerra, dormir, comparar fechas, preguntar cortésmente al tomcat para recargar, etc. Nada parecía funcionar.

Podría ser algo que estoy haciendo mal, pero he escuchado la misma experiencia de muchas personas, así que estoy aquí para obtener algunos consejos, ¿qué dices? ¿Cuál es la mejor forma de desplegar una nueva guerra a un gato?

Gracias!

+0

¿cuál es el problema? ¿falta del tiempo? ¿Es este DEV/PREPROD/lo que sea o PROD? ¿Necesita persistir sesiones durante el ciclo de apagado/reinicio? – TacticalCoder

+0

hey @krakover Si está satisfecho con una de las respuestas, ¿le importaría marcar una de ellas como aceptada – systemkern

Respuesta

0

Acabo de utilizar la herramienta de administración de Tomcat para detener el proceso, eliminarlo e instalar la nueva GUERRA. Pan comido.

9

Tiendo a optar por la Opción 2. Si hay un proyecto en el que estoy trabajando, especialmente con un depurador conectado, creo que las cosas finalmente se empiezan a ensuciar. Podría estar persiguiendo a una farsa durante una hora antes de que descubra que limpiar todo hace que el problema desaparezca. Entonces es bueno tener un script en el lado que de vez en cuando puedo lanzar a aclarar todo:

  • fuerza de cierre con unos 60 años de tiempo de espera
  • clara a cabo los directorios de registro, temporales, de trabajo
  • claras a cabo la carpeta webapp
  • copia en el nuevo archivo de la guerra desde el lugar de construcción
  • explotar el nuevo archivo de la guerra
  • si es necesario, ejecute un script awk para personalizar los valores específicos de la máquina en los archivos de propiedades (de ahí el ex anterior PLODE)
  • puesta en marcha con el medio ambiente CATALINA_PID conjunto de variables (para permitir que la fuerza de cierre)

Normalmente las cosas muy bien parada. Si no es así, generalmente hay un hilo de fondo que se inició pero que falta un gancho de cierre (digamos un cliente de memecached) y necesita ser cazado. Normalmente, simplemente caer en la nueva guerra parece funcionar. Pero si en un entorno de desarrollo, una secuencia de comandos para hacer el reinicio completo es agradable.

+1

+1 por una secuencia de comandos para administrar todo esto, la única manera fiable y repetible de ir – Brian

+0

Tengo a Tomcat escribiendo su pid al inicio y al eliminar al apagar, para que pueda ver cuándo se cierra a través de un script sin adivinar. Fue un dolor (y no recuerdo cómo hacerlo), pero valió la pena. Mis implementaciones son 100% automáticas. –

2

subo la guerra para mi directorio, cd a// local/usr Tomcat, a continuación, ejecute los siguientes comandos:

bin/shutdown.sh 
rm webapps/ROOT.war 
rm -rf webapps/ROOT 
cp ~/ROOT.war webapps 
bin/startup.sh 

Es bastante fácil de automatizar, pero he estado demasiado perezoso (o no perezoso) para hacer eso hasta ahora.

+1

Si reemplaza el "cp" por un "mv", se implementará mucho más rápido ... – Kdeveloper

4

Cargo - http://cargo.codehaus.org/ - puede utilizarse para implementar de forma remota archivos WAR en varios contenedores web, incluido Tomcat.

Consulte http://cargo.codehaus.org/Quick+start para ver ejemplos en Java. El soporte Ant y Maven también está disponible.

+0

Tomcat también proporciona tareas de implementación (y anulación del despliegue) para Ant. – erickson

10

puede automatizar fácilmente esto en un script de shell con el enrollamiento

en Tomcat 6:

curl --upload-file deployme.war "http://tomcat:[email protected]:8088/manager/deploy?path=/deployme&update=true" 

en Tomcat 7

curl -T "deployme.war" "http://tomcat:[email protected]:8080/manager/text/deploy?path=/deployme&update=true" 

oa través de casi cualquier porgramming idioma. Publiqué una solución basada en Java here

Cuestiones relacionadas