Korzystam z poniższego skryptu powłoki na komputerze, na którym działa serwer aplikacji c ++ na porcie 8080, aw skrypcie powłoki wykonuję adres URL i zapisuję odpowiedź pochodzącą z tego adresu URL w zmiennej DATA.
Załóżmy jednak, że jeśli ten sam serwer aplikacji nie działa, nie będzie w stanie wykonać adresu URL, a następnie wydrukuje się Retrying Again
i przejdzie w tryb uśpienia przez 30 sekund, a następnie ponownie uruchom ten sam adres 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"
A oto HOSTNAME
lokalna nazwa hosta serwera, na którym uruchamiam powyższy skrypt powłoki.
Opis problemu: -
Teraz próbuję zrobić, jeśli serwer jest wyłączony, to wydrukuje się, a następnie Retrying Again
chcę sprawdzić, czy port 8080
jest otwarty, $HOSTNAME
czy nie. Jeśli nie, oznacza to, że serwer jest wyłączony, więc chcę zrestartować serwer, wykonując to polecenie, a następnie zasnąć przez 30 sekund, jak pokazano powyżej w skrypcie powłoki.
/opt/app/test/start_stop.sh start
Czy można to zrobić tutaj w moim powyższym skrypcie powłoki?
Używam tego skryptu powłoki na Ubuntu 12.04.
źródło
lsof -i :8080 -sTCP:LISTEN
i nie dostaję nic na konsolę, ale jeśli próbuję tego,netstat -tulpn | grep :8080
to otrzymuję mój proces, który działa na porcie 8080, dlaczego tak jest?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
?Najprostszy sposób na bash. Sprawdź, czy twój port jest otwarty.
Zastąp echo tym, co chcesz.
Lub możesz użyć nc.
Zwroty:
źródło
nc
jest doskonałym rozwiązaniem dla mojego przypadku użycia; dzięki za sugestieOpracowanie odpowiedzi RJ, które notatki
nc
są również przydatne ... Przydaje się nie tylkonc
w szybkim zapytaniu z wiersza poleceńale można go użyć bez opcji -v, jeśli czytelność nie jest tym, czego szukasz - np. do użycia w skrypcie (kod wyjścia wskaże, czy port jest otwarty, czy zamknięty).
źródło