#1 Le 29/08/2016, à 14: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, à 14:21)
Hors ligne