Ich führe das folgende Shell-Skript auf einem Computer aus, auf dem der C ++ - Anwendungsserver auf Port 8080 ausgeführt wird, und im Shell-Skript führe ich eine URL aus und speichere die Antwort von dieser URL in der Variablen DATA.
Angenommen, derselbe App-Server ist inaktiv und kann die URL nicht ausführen. Anschließend wird die URL Retrying Again
30 Sekunden lang gedruckt und in den Energiesparmodus versetzt. Anschließend wird die gleiche URL erneut ausgeführt.
#!/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"
Und hier HOSTNAME
ist der lokale Hostname des Servers, auf dem ich mein obiges Shell-Skript ausführe.
Problemstellung:-
Was ich jetzt versuche zu tun, ist, wenn der Server ausfällt, dann wird es gedruckt, Retrying Again
so dass ich danach überprüfen möchte, ob der Port 8080
geöffnet ist $HOSTNAME
oder nicht. Wenn dies nicht der Fall ist, bedeutet dies, dass der Server inaktiv ist. Daher möchte ich den Server durch Ausführen dieses Befehls neu starten und dann 30 Sekunden lang in den Ruhezustand versetzen, wie oben im Shell-Skript gezeigt.
/opt/app/test/start_stop.sh start
Ist dies hier in meinem obigen Shell-Skript möglich?
Ich führe dieses Shell-Skript unter Ubuntu 12.04 aus.
quelle
lsof -i :8080 -sTCP:LISTEN
und ichnetstat -tulpn | grep :8080
bekomme nichts auf die Konsole, aber wenn ich es versuche, bekomme ich meinen Prozess, der auf Port 8080 läuft, warum ist es so?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
?Einfachster Weg in der Bash. Testen Sie, ob Ihr Port offen ist.
Ersetzen Sie das Echo durch das, was Sie möchten.
Oder du kannst nc benutzen.
Kehrt zurück:
quelle
nc
ist eine großartige Lösung für meinen Anwendungsfall; danke für den VorschlagEs
nc
ist nicht nurnc
für eine schnelle Befehlszeilenabfrage nützlich, auf die Antwort von RJ einzugehen, welche Notizen auch nützlich sindEs kann jedoch auch ohne -v verwendet werden, wenn die für den Menschen lesbare Sache nicht das ist, was Sie suchen - z. B. zur Verwendung in einem Skript (der Exit-Code gibt an, ob der Port offen oder geschlossen ist).
quelle