2009-04-14 5 views
0

Nous avons un serveur d'applications en cours d'exécution jboss une webapp. Nous devons implémenter un bouton de redémarrage quelque part dans l'interface utilisateur qui entraîne le redémarrage du serveur d'applications dans son ensemble. Notre implémentation naïve consistait à appeler notre script /etc/init.d avec la commande restart. Cela arrête notre serveur d'applications, puis le redémarre. Cependant, il semble que lorsque le processus Java s'arrête, le processus enfant exécutant les scripts de redémarrage disparaît également avant d'arriver au point où il redémarre le serveur d'applications.Est-ce que java peut appeler un script pour redémarrer java dans solaris?

Nous avons essayé d'ajouter des variations sur « & » aux endroits où les scripts sont appelés, mais cela n'a pas aidé. Y a-t-il un endroit où tirer le script et mourir sans tuer le processus de script?

+0

Une autre approche pourrait être de configurer init.d pour redémarrer votre serveur d'applications quand il arrête. Vous devez ensuite simplement arrêter la machine virtuelle Java et laisser Solaris la redémarrer. –

Répondre

1

Essayez d'utiliser la commande nohup pour exécuter quelque chose dans le script que vous exécutez via Java. Autrement dit, si le script que vous exécutez à partir de Java fonctionne actuellement ceci:

/etc/init.d/myservice restart 

puis changer pour ce faire:

nohup /etc/init.d/myservice restart 

Aussi, assurez-vous que vous n'avez pas stdin, stdout ou stderr être intercepté par le processus Java. Cela pourrait causer des problèmes, potentiellement. Ainsi, peut-être essayer (en supposant bash ou sh):

nohup /etc/init.d/myservice restart >/dev/null 2>&1 
+0

Ce serait probablement dans certains cas, mais malheureusement pas le nôtre. Notre processus de serveur lui-même a été démarré avec nohup. Donc, pour l'arrêter, nous devons envoyer SIGINT ou SIGTERM. Et ceux-ci se propagent au script de redémarrage malgré le nohup. C'est un catch-22. –

0

Définissez vos gestionnaires de signaux dans le script de redémarrage d'ignorer le signal avec un piège:

trap "" 2 # ignore SIGINT 
trap "" 15 # ignore SIGTERM 

Après avoir fait cela, vous devrez Tuez votre script de redémarrage avec un autre signal si nécessaire, probablement SIGKILL.

Questions connexes