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.
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?