Jak stworzyć pętlę w bashu, która czeka na odpowiedź serwera WWW?
Powinien wypisać "." mniej więcej co 10 sekund i poczekaj, aż serwer zacznie odpowiadać.
Zaktualizuj, ten kod sprawdza, czy otrzymuję dobrą odpowiedź z serwera.
jeśli curl --output / dev / null --silent --head --fail "$ url"; następnie echo „URL istnieje: $ url” jeszcze echo "URL nie istnieje: $ url" fi
Odpowiedzi:
Łącząc pytanie z odpowiedzią Chepnera, zadziałało to dla mnie:
źródło
$( )
zamiast tego.--head
?--head
niczego nie zmieni, ale możesz to zrobić, jeśli chcesz poćwiczyć logikę w treści odpowiedzi (np. Status.html).--head
zawsze wracało405
. Musiałem go usunąć, żeby działałChciałem ograniczyć maksymalną liczbę prób. Na podstawie zaakceptowanej odpowiedzi Thomasa zrobiłem to:
źródło
--max-time 5
jeśli z jakichś powodów żądany linkhttping jest do tego fajny. proste, czyste, ciche.
podczas gdy / do itp. jest osobistym pref.
źródło
for i in
seq 60; do httping -qc1 http://myhost:myport && echo && break sleep 5 echo -n ${i}.. done
Stosowanie znaków grawerowanych
` `
jest przestarzałe . Użyj$( )
zamiast tego:źródło
Ciekawa łamigłówka. Jeśli nie masz dostępu lub asynchronicznego interfejsu API ze swoim klientem, możesz spróbować grepować gniazda tcp w następujący sposób:
Ale to zajęte oczekiwanie z 1-sekundowymi odstępami. Prawdopodobnie potrzebujesz większej rozdzielczości. To również jest globalne. Jeśli zostanie nawiązane inne połączenie z tym serwerem, wyniki są nieprawidłowe.
źródło
jeśli potrzebujesz sprawdzić, czy serwer jest dostępny, przyczyna się restartuje lub coś innego, możesz spróbować utworzyć wget na serwerze i przeanalizować odpowiedź lub błąd, jeśli otrzymasz 200 lub nawet 404, serwer działa, ty można zmienić limit czasu wget za pomocą --timeout = sekundy, można ustawić limit czasu na 10 sekund i zrobić pętlę, aż grep nad odpowiedzią przyniesie wynik.
nie wiem, czy to jest to, czego szukasz, czy naprawdę potrzebujesz kodu bash.
źródło