Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 29/08/2016, à 15:19

sysforlaw

Script -Restart Automatique Tomcat-

Bonjour à tous et a toutes.

[Contexte] 
Les informations qui vont suivre ne sont pas essentielles à la compréhension du problème.

Je cherche a faire un restart automatique de plusieurs Tomcats lorsque Out of memory arrive, pour cela il suffit de placer cette argument lors du lancement du Tomcat

-XX:OnOutOfMemoryError="/yourscripts/tomcat-restart"

J'ai une dizaine de tomcat et pour pouvoir les restart j'ai besoin de savoir quel tomcat à planter en récupérant son PID et son NOM

-XX:OnOutOfMemoryError="/home/BEGIN.sh"

[Le problème]
Java appelle donc mon script BEGIN.sh  qui récupéré le PID du tomcat et son nom puis il lance le script OOM.sh qui traite les valeurs et fait des tests pour restart le tomcat dans de bonnes conditions.

#!/bin/bash

##Récuperation du PID du tomcat
echo $PPID
pidtom=$(ps -ef -q $PPID| awk '{ print $3; }' | grep -v PPID) # on récupère le pid du tomcat  
pidtom=$(echo $pidtom)
echo $pidtom #le pid du Tomcat a kill
echo $pidtom > /home/pidtom # on récupère le pid


##Recupération du nom du tomcat
nametom=$(ps aux -q $pidtom | grep -E -o 'tomcat\w+' | head -n 1)
nametom=$(echo $nametom)
echo $nametom #le nom du Tomcat
echo $nametom > /home/nametom
#sleep 20
cd /home/
exec nohup ./OOM.sh &


lorsque OOM.sh est appelé par BEGIN.sh il garde le port d'écoute de la jvm même après que le tomcat soit kill

Avant KILL

    COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
    java    16948 root    4u  IPv4 144075      0t0  TCP *:55557 (LISTEN)
    OOM.sh  16991 root    4u  IPv4 144075      0t0  TCP *:55557 (LISTEN)
    sleep   16994 root    4u  IPv4 144075      0t0  TCP *:55557 (LISTEN)

Après KILL

    COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
    OOM.sh  17480 root    4u  IPv4 150679      0t0  TCP *:55557 (LISTEN)
    sleep   17498 root    4u  IPv4 150679      0t0  TCP *:55557 (LISTEN)

Au moment d’effectuer le restart du tomcat ça ne marche pas car le port d'écoute est utilisé par le script lui même .

    ERROR: transport error 202: bind failed: Adresse déjà utilisée
    ERROR: JDWP Transport dt_socket failed to initialize, TRANSPORT_INIT(510)

J'ai essayer d'appeler mon script de différentes manières dans BEGIN.sh mais cela ne change rien

./OOM.sh &
nohup ./OOM.sh &
exec ./OOM.sh
exec nohup ./OOM.sh & disown

-Au final ma question est la suivante:
Comment faire pour que le script OOM.sh ne soit plus lié a java et a ce port d'écoute ?

-Questions subsidiaires:
Pourquoi mon script hérite du port d'écoute du tomcat, est-ce lié au file descriptor ?

Merci d'avance

Dernière modification par sysforlaw (Le 29/08/2016, à 15:21)

Hors ligne