#1 Le 26/03/2008, à 15:48
- sbouli
[résolu] cron ecoute port et relance serveur
Bonjour,
Je souhaiterais faire un script shell appelé en cron toutes les X minutes dont le boulo serait de vérifier que mon serveur XML tourne et si non le relancer. Pour cela il faut vérifier que le port XXXX est bien utilisé par java.
Je ne suis pas expert en bash et je ne vois pas trop comment m'y prendre, je sais déjà extraire la ligne pour l'utilisation du port :
netstat -vtlnp | grep "lance_SERVEURXML"
pour infos, le script de lancement du serveur est de la forme :
nohup sh /home/admin/lance_SERVEURXML.sh &
et lance_SERVEURXML.sh :
#!/bin/bash
cd /home/admin
java -classpath /home/admin/SERVEURXML: SERVEURXML.Serveur_XML
Logiquement le fichier cron devrait avoir la tête :
if (netstat -vtlnp | grep "lance_SERVEURXML" vide) alors nohup sh /home/admin/lance_SERVEURXML.sh &
Merci pour votre aide.
Stéphane
Dernière modification par sbouli (Le 27/03/2008, à 14:29)
Hors ligne
#2 Le 26/03/2008, à 15:59
- philou8237
Re : [résolu] cron ecoute port et relance serveur
pour info :
netstat -vtlnp | grep "lance_SERVEURXML" retourne une valeur non nulle si il ne trouve pas le pattern donné.
Donc si tu fais un truc du style :
#!/bin/bash
while true; do
res=`netstat -vtlnp | grep "lance_SERVEURXML" > /dev/null 2>&1`
if [ $res -ne 0 ]; then
nohup sh /home/admin/lance_SERVEURXML.sh &
fi
sleep 5
done
Voilou. Je peux pas tester si ça marche (pas d'erreur de syntaxe) je suis sur un windows
Hors ligne
#3 Le 26/03/2008, à 16:30
- sbouli
Re : [résolu] cron ecoute port et relance serveur
Tout d'abord merci !!
J'ai 1 erreur
/home/admin/cron_check.sh: line 6: [: -ne : opérateur unaire attendu
Hors ligne
#4 Le 26/03/2008, à 16:33
- philou8237
Re : [résolu] cron ecoute port et relance serveur
mmm... bizarre... pfff c chiant d'etre sous windows là...
Essaies avec un -gt à la place, mais normalement c un opérateur binaire ne...
Hors ligne
#5 Le 26/03/2008, à 16:44
- sbouli
Re : [résolu] cron ecoute port et relance serveur
nop même erreur avec -gt ....
Hors ligne
#6 Le 26/03/2008, à 16:46
- philou8237
Re : [résolu] cron ecoute port et relance serveur
essaie de remplacer while true par while [ 1 -eq 1 ]
je sais c moche...
mais sans shell je peux pas trop t'aider... faudra attendre que je me rentre du boulot... cad. ds 45 minutes
Hors ligne
#7 Le 26/03/2008, à 17:03
- sbouli
Re : [résolu] cron ecoute port et relance serveur
en fait si je fait ça :
while true; do
res=`netstat -vtlnp | grep "java" > /dev/null 2>&1`
if [ -z $res ]; then
echo "il faut lancer le prog";
fi
sleep 5
done
avec le -z qui test si la chaine est nulle, il lance toujours l'appli car res reste toujours vide même s'il y a une ligne qui sort du grep ....
Stéphane
Hors ligne
#8 Le 26/03/2008, à 17:06
- philou8237
Re : [résolu] cron ecoute port et relance serveur
oui normal, >/dev/null 2>&1 supprime les sortie standard et d'erreur.
j'ai fais une grosse fôte
faut rédiger :
while true; do
netstat -vtlnp | grep "java" > /dev/null 2>&1
res=$?
if [ $res -ne 0 ]; then
echo "il faut lancer le prog";
fi
sleep 5
done
Désolé pour la bourde...
ça devrait mieux marcher
Hors ligne
#9 Le 26/03/2008, à 17:10
- sbouli
Re : [résolu] cron ecoute port et relance serveur
excellent !!
ya plus qu'a cronner et à virer le while et sleep
Merci !
Stéphane
Hors ligne
#10 Le 27/03/2008, à 17:34
- Saito
Re : [résolu] cron ecoute port et relance serveur
Juste en passant, si tu utilises GNU grep, il y a l'option -q qui permet de ne rien afficher, donc tu peux transformer comme ceci:
if ! netstat -vtlnp | grep -q java; then
echo lançage de prog imminente
fi
Aku-Soku-Zan_Shinsengumi
Hors ligne