2013-05-04 1 views
2

J'ai écrit un script bash pour déployer automatiquement une application Web sur le conteneur Tomcat chaque fois qu'il est déclenché. Il est assez simple:Echec du démarrage automatique de tomcat par les scripts bash

  1. Dump la base de données en cours pour la sauvegarde
  2. Arrêter le processus tomcat actuel
  3. Supprimer le dossier application web
  4. Remplacez le fichier de guerre avec le nouveau
  5. Démarrer à nouveau Tomcat

Cependant, maintenant je veux avoir un repli. S'il y a un problème dans le processus de démarrage, la base de données sera restaurée et l'ancien fichier war sera à nouveau déployé.

Mon problème est que je ne sais pas quand une application Web n'a pas pu démarrer. Une de mes implémentations est que je vais vérifier la taille du fichier de journalisation de mon application web, si après un certain temps ça n'augmente pas (ce qui signifie qu'il n'y a rien d'écrit), alors le système devrait comprendre que le déploiement échoue et nous devrions restaurez l'ancienne application Web. Cependant, c'est un peu sale et je ne suis pas sûr de ce qui se passera si mon fichier de journalisation est lancé à ce moment-là.

Tomcat dispose-t-il d'un mécanisme permettant de prendre en charge la détection de démarrage échoué d'une application Web?

+1

Vérifiez http://tomcat.apache.org/tomcat-7.0-doc/manager-howto.html#List_Currently_Deployed_Applications – home

+0

@home: merci de votre intérêt, mais je veux vérifier le succès du déploiement dans le contexte de la machine serveur, pas via un accès web. Yat-il un moyen de récupérer la même information sur le contexte du serveur, ou j'ai vraiment besoin de faire curl pour l'obtenir? –

+1

AFAIK, le serveur (matériel OS +) ne connait pas l'état de l'application car votre application est 'juste' une partie de l'instance JVM exécutant Tomcat ainsi que votre application (un seul processus Java). Une autre approche consiste à implémenter une sorte de servlet 'probe' dans votre application. Cela vous permet de tester plus que l'état technique "en vie" (par exemple, disponibilité de la base de données). – home

Répondre

1

Avez-vous regardé le Manager fourni avec Tomcat? Il vous donne une API pour déterminer facilement le statut des applications Web déployées à l'intérieur.

+0

est-ce http://tomcat.apache.org/tomcat-7.0-doc/manager-howto.html#List_Currently_Deployed_Applications? –

+0

de cette façon, il semble que je vais devoir boucler mon domaine pour obtenir le résultat? Y a-t-il un moyen local? Dans mon script bash, j'ai accès à tous les fichiers sur le serveur (y compris le conteneur Tomcat). Avons-nous vraiment besoin d'aller la boucle? –

+0

Accéder à l'API et demander à tomcat de vous indiquer l'état de votre application est probablement le moyen le plus fiable. Obtenir votre script bash pour vérifier l'existence ou l'état de certains fichiers locaux est un peu fragile - que se passe-t-il si l'emplacement d'un fichier change dans une version ultérieure de tomcat ?. – seedhead