2010-02-05 3 views
3

J'ai deux exigences pour mon application Java. Si elle meurt, redémarrez-la. Si le serveur redémarre, redémarrez-le - assez simple. Utilisation de la réponse here J'ai un script qui va redémarrer lorsque l'application Java meurt.Démarrer le processus java au démarrage et redémarrer automatiquement à la mort

 
#!/bin/bash 

until java -Xms256m -Xmx768m -jar MyApp.jar; do 
    echo "MyApp crashed with exit code $?. Respawning... " >&2 
    sleep 5 
done 

je peux courir avec « nohup restart_script.sh & » et il fonctionnera toute la journée sans problème. Maintenant pour l'exigence de démarrage. J'ai pris le script /etc/init.d/crond et remplacé le binaire crond avec mon script mais il se bloque au démarrage. Lorsque j'exécute/sbin/service myapp start, le script démarre mais bloque la console lorsque j'exécute/sbin/service monapplication. J'ai essayé "daemon --user appuser nohup $ MYAPP &" et je suis immédiatement retourné à l'invite sans aucune indication [OK] et quand je fais un ps, je vois toujours que l'init est bloqué. Des idées comment appeler un script dans le script init et le faire revenir correctement?

Merci,

Greg

+0

Cela peut être plus approprié pour http://superuser.com. – danben

Répondre

5

La fonction démon sur ma machine (ancien RedHat) ne retourne pas tant que le programme exécuté n'est pas retourné. Donc, vous allez avoir besoin de votre petit script utilitaire pour le forking.

Essayez d'écrire votre utilitaire comme ceci:

#!/bin/bash 

(
    until java -Xms256m -Xmx768m -jar MyApp.jar; do 
     echo "MyApp crashed with exit code $?. Respawning... " >&2 
     sleep 5 
    done 
) & 

Comment cela fonctionne. Mettre une commande entre parenthèses démarre le code en cours d'exécution dans un nouveau processus. Vous mettez le processus en arrière-plan pour que le processus d'origine revienne sans l'attendre.

4

Vous avez besoin d'un wrapper de service java, voici une très bonne ... tanuki
Je veux dire, vous n'avez pas besoin de réinventer la roue, il sont des outils là-bas ..

+0

+1 pour l'utilisation d'une solution déjà existante –

+0

Désolé, impossible d'utiliser une licence incompatible. – GregB

Questions connexes