2012-03-31 12 views
14

Negli ultimi 10 anni circa, ho avuto l'opportunità di distribuire applicazioni Web in un tomcat infinite volte. Ho anche scritto diversi script cercando di farlo automaticamente, ma mai riuscito a automatizzarlo completamente.Distribuire un war to tomcat

Ecco il problema. Sto cercando di dispiegare una nuova guerra, con lo stesso nome di una guerra esistente nelle applicazioni web del mio gatto.

Opzione 1: l'approccio ingenuo: copia la guerra e attendi che aggiorni la directory esplosa. Questo a volte funziona. Molte volte - la directory esplosa non viene aggiornata in un tempo ragionevole.
Opzione 2: L'approccio attraverso - ferma il tomcat, elimina tutte le guerre e i file temporanei. copia la guerra e avvia il gatto. Questo di solito comporta l'arresto del tomcat, in attesa di un po 'di tempo - e poi controlla se il processo è ancora vivo e lo uccide.
Opzione 3: L'approccio manuale - Potrebbe essere sorprendente, ma ho trovato che funziona molte volte - copia la guerra, attendi che la directory esplosa sia aggiornata, e una volta eseguita - riavvia il tomcat. in caso contrario, puoi provare a eliminare i file temporanei di lavoro e, a volte, aiutare.

Ho provato anche molte opzioni - con ordine e sottoinsieme delle azioni - riavvio, stop, cancella guerra, elimina esploso, elimina contesto localhost, cancella directory di lavoro localhost, copia guerra, sleep, confronta date, chiedi gentilmente al tomcat per ricaricare, ecc. Niente sembrava funzionare.

Potrebbe essere qualcosa che sto sbagliando, ma ho sentito la stessa esperienza da numerose persone, quindi sono qui per avere qualche consiglio - che cosa dici? Qual è il modo migliore per distribuire una nuova guerra a un tomcat?

Grazie!

+0

qual è il problema? i tempi di inattività? È questo DEV/PREPROD/qualunque o PROD? Hai bisogno di mantenere le sessioni durante il ciclo di spegnimento/riavvio? – TacticalCoder

+0

hey @krakover se sei soddisfatto di una delle risposte ti dispiacerebbe contrassegnare uno di loro come accettato – systemkern

risposta

0

Ho appena utilizzato lo strumento di gestione Tomcat per interrompere il processo, rimuoverlo e installare il nuovo WAR. Vai tranquillo.

9

Tendo ad optare per l'opzione 2. Se c'è un progetto su cui sto lavorando in particolare con un debugger collegato, trovo che le cose finiscano per incasinarsi. Potrebbe essere a caccia di un'aringa rossa per un'ora prima che scopro che tutto svanisce e il problema scompare. Poi è bello avere uno script sul lato che posso tanto in tanto lanciare per cancellare tutto su:

  • forza di spegnimento con un '60 timeout
  • sgomberare le directory di log, temporanei, di lavoro
  • chiare fuori la cartella webapp
  • copia nel nuovo file guerra dal percorso di generazione
  • esplodere il nuovo file di guerra
  • se necessario, eseguire uno script awk per personalizzare i valori specifici della macchina nei file di proprietà (da cui il es precedente plode)
  • avvio con la variabile ambiente CATALINA_PID (per abilitare la forza di spegnimento)

Normalmente arresto cose bene. In caso contrario, di solito c'è un thread in background che è stato avviato ma manca un hook di shutdown (ad esempio un client memecached) e deve essere ricercato. Normalmente, il solo cadere nella nuova guerra sembra funzionare. Ma se in un ambiente di sviluppo, uno script per eseguire il riavvio completo è bello.

+1

+1 per uno script per gestire tutto questo, l'unico modo affidabile e ripetibile per andare – Brian

+0

Ho Tomcat a scrivere il suo pid all'avvio e all'eliminazione allo spegnimento, così posso dire quando viene spento tramite uno script senza indovinare. Era un dolore (e non ricordo come farlo), ma ne valeva la pena. I miei spiegamenti sono automatizzati al 100%. –

2

a caricare la guerra per la mia home directory, cd a// local/tomcat usr, quindi eseguire i seguenti comandi:

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

Facile abbastanza per automatizzare, ma sono stato troppo pigro (o non abbastanza pigro) per farlo fino ad ora.

+1

Se si sostituisce "cp" per un "mv", verrà distribuito molto più rapidamente ... – Kdeveloper

4

Carico - http://cargo.codehaus.org/ - può essere utilizzato per la distribuzione remota di file WAR su un numero di contenitori Web, incluso Tomcat.

Vedere http://cargo.codehaus.org/Quick+start per esempi in Java. È disponibile anche il supporto Ant e Maven.

+0

Tomcat fornisce anche attività di distribuzione (e disoccupazione) per Ant. – erickson

10

si può facilmente automatizzare questo in uno script di shell con l'arricciatura

su Tomcat 6:

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

su Tomcat 7

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

o via quasi tutti i porgramming linguaggio. Ho pubblicato una soluzione basata su Java here

Problemi correlati