2017-06-24 3 views
-1

j'ai un serveur qui parfois arrêter de travailler, la seule solution que j'ai trouvé est de créer un cron qui exécute cette commande:Linux Comand et action automatisée

netstat -tn | grep -c :80 

La commande suivante affichera le nombre de connexions au port 80. Le problème est que je veux que si la sortie est 0 alors le serveur a besoin de redémarrer. Tout le monde peut m'aider avec ça?

+0

Vous demandez en fait de redémarrer un serveur si le service web est en panne? – reichhart

+0

Oui, vous avez raison @reichhart –

+0

Ceci est unix pays. Dans ce pays, vous ne redémarrez que les serveurs pour les nouveaux noyaux. ;-) Vous devriez corriger le service web! Et si le service Web est arrêté: redémarrez-le. N'utilisez pas cron. – reichhart

Répondre

0

Résolu, avec quelques recherches j'ai écrit ceci:

#!/bin/bash 
while true 
do 
OUTPUT=`netstat -tn | grep -c :80` 
if [ "$OUTPUT" == '0' ]; then 
echo 'No connections, rebooting :)' 
else 
echo "$OUTPUT" 
fi 
sleep 1 
done 
+1

Vous redémarrez un hôte s'il ne dispose pas de connexions au port TCP 80 entrant et sortant dans les 2 dernières minutes? Êtes-vous sûr que vous faites la bonne chose? Et le script bash avec la boucle while et le "sleep 1" montre que vous avez encore beaucoup à apprendre sur unix. – reichhart

+1

En fait, la commande que vous recherchez est "netstat -nt | awk '{print $ 4}' | grep -c ': 80 $'" (vérifie le port local). Mais vous pensez à la raison pour laquelle personne n'a répondu à votre question (sauf vous-même) et pourquoi je posais les questions. Vous allez dans le mauvais sens. N'utilisez pas cette commande, n'utilisez pas un cronjob pour votre problème et n'utilisez pas un script qui s'exécute à l'infini. Pensez au vrai problème, posez la question correspondante et vous obtiendrez une réponse parfaite ici. – reichhart

+0

@reichhart Droite. Vous êtes sûr de cette commande? Quand j'ai juste essayé netsat -nt le 4ème champ est l'état si piping que grep pour un numéro de port ne le trouvera jamais. Je pense que ce que vous vouliez probablement dire était netstat -nt | awk '$ 3 ~ /: 80 $/{C++} END {print c + 0}' '(pas de grep requis bien sûr) mais je n'utilise pas netsat donc je devine juste le bon numéro de champ. –