J'exécute mon script shell ci-dessous sur une machine sur laquelle le serveur d'applications c ++ s'exécute sur le port 8080 et dans le script shell j'exécute une URL et stocke la réponse provenant de cette URL dans la variable DATA.
Mais supposons que si le même serveur d'applications est en panne, il ne pourra pas exécuter l'URL, puis il imprimera Retrying Again
et dormira pendant 30 secondes, puis exécutera à nouveau la même URL.
#!/bin/bash
HOSTNAME=$hostname
DATA=""
RETRY=15
echo $HOSTNAME
while [ $RETRY -gt 0 ]
do
DATA=$(wget -O - -q -t 1 http://$HOSTNAME:8080/beat)
if [ $? -eq 0 ]
then
break
else
echo "Retrying Again" >&2
# restart the server
let RETRY-=1
sleep 30
fi
done
echo "Server is UP"
Et voici HOSTNAME
le nom d'hôte local du serveur sur lequel j'exécute mon script shell ci-dessus.
Énoncé du problème: -
Maintenant, ce que j'essaie de faire, c'est que si le serveur est en panne, il s'imprimera Retrying Again
donc après cela, je veux vérifier si le port 8080
est ouvert $HOSTNAME
ou non. Sinon, cela signifie que le serveur est en panne, donc je veux redémarrer le serveur en exécutant cette commande, puis dormir pendant 30 secondes comme indiqué ci-dessus dans le script shell.
/opt/app/test/start_stop.sh start
Est-ce possible de le faire ici dans mon script shell ci-dessus?
J'exécute ce script shell sur Ubuntu 12.04.
la source
lsof -i :8080 -sTCP:LISTEN
et je n'obtiens rien sur la console mais si j'essayenetstat -tulpn | grep :8080
alors j'obtiens mon processus qui s'exécute sur le port 8080 pourquoi est-ce ainsi?netstat -tulpn | grep :8080
?david@machineA:/home/david$ netstat -tulpn | grep :8080 (Not all processes could be identified, non-owned process info will not be shown, you would have to be root to see it all.) tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 27530/test_server
lsof -iTCP -sTCP:LISTEN | grep 8080
?Manière la plus simple en bash. Testez si votre port est ouvert.
Remplacez l'écho par ce que vous voulez.
Ou vous pouvez utiliser nc.
Résultats:
la source
nc
est une excellente solution pour mon cas d'utilisation; merci d'avoir suggéréÉlaborer sur la réponse de RJ quelles notes
nc
sont également utiles ... Non seulement estnc
utile pour une requête rapide en ligne de commandemais il peut être utilisé sans -v si la lisibilité humaine n'est pas ce que vous recherchez - par exemple, pour une utilisation dans un script (le code de sortie indiquera si le port est ouvert ou fermé).
la source