Jak mogę pingować określony adres, a gdy go znajdziesz, przestań pingować.
Chcę go używać w skrypcie bash, więc gdy host się uruchamia, skrypt kontynuuje pingowanie i od momentu, gdy host jest dostępny, skrypt kontynuuje ...
linux
bash
ping
command-line-interface
Szlifierka Versluys
źródło
źródło
ping
odczeka 10 sekund, zanim zrezygnuje z pingowania. Jeśli chcesz to skrócić do 1 sekundy, możesz użyć-w1
.-W1
kill %1
go zabić.Możesz zrobić pętlę, wysłać jeden ping i w zależności od stanu przerwać pętlę, na przykład (bash):
Umieszczenie tego gdzieś w skrypcie zablokuje, dopóki nie
www.google.com
będzie możliwe pingowanie.źródło
while true
ibreak
to rozwiązanie czystsze, IMO.while true; do sleep 5; ping ...
Wiem, że pytanie jest stare ... i konkretnie dotyczy
ping
, ale chciałem podzielić się moim rozwiązaniem.Używam tego podczas ponownego uruchamiania hostów, aby wiedzieć, kiedy mogę ponownie włączyć SSH. (Ponieważ
ping
będzie reagować przez kilka sekund przedsshd
uruchomieniem).źródło
Wyślij ping do hosta docelowego jeden raz. Sprawdź, czy ping się powiódł (zwracana wartość ping wynosi zero). Jeśli host nie żyje, ping ponownie.
Poniższy kod może zostać zapisany jako plik i wywołany z nazwą hosta jako argumentem lub usunięty z pierwszego i ostatniego wiersza i użyty jako funkcja w istniejącym skrypcie (nazwa hosta waitForHost).
Kod nie ocenia przyczyny niepowodzenia, jeśli ping nie skutkuje odpowiedzią, a zatem zapętla się na zawsze, jeśli host nie istnieje. Moja strona podręczna BSD wymienia znaczenie każdej zwracanej wartości, podczas gdy linux nie, więc myślę, że to może nie być przenośne, dlatego ją pominąłem.
źródło
Możesz usunąć tryb uśpienia 1, to tylko tutaj, aby zapobiec problemowi z powodzią w przypadku, gdy host byłby dostępny, ale ping nie wychodziłby z kodem 0.
źródło
Zobacz dobre opcje w Stackoverflow . Oto przykład w bash, będziesz musiał zapętlić następujący kod, aż zwróci pomyślny wynik ping.
źródło
dowolna z powyższych pętli może być również używana z fping zamiast pingowania, co IMO lepiej nadaje się do użycia w skryptach niż pingowanie. Szczegóły w fping (1) .
przydatne również do testowania, czy maszyny działają, zanim coś na nich zrobią. Prosty przykład:
źródło
Spróbuje to podaną liczbę razy.
Zamiast echa
$r
możesz go przetestować i działać zgodnie z jego wartością:źródło
Aby ładnie obsługiwać SIGINT na BSD ping.
jako funkcja
źródło
Korzystałem z następującej funkcji. Podoba mi się, ponieważ mogę powiedzieć, żeby przestał próbować po chwili:
Można go użyć w ten sposób do uruchomienia czegoś:
źródło
Zasadniczo chcę czekać na uruchomienie bazy danych lub innego serwera, ale nie chcę czekać zbyt długo. Poniższy kod czeka przez 10 sekund, a następnie ustawia kod wyjścia, jeśli serwer nie pojawi się w wyznaczonym terminie.
Jeśli serwer pojawi się przed upływem terminu, pętla ulegnie zwarciu, aby można było uruchomić kolejny bit kodu.
źródło
Dalsze udoskonalenie odpowiedzi Gordona Davissona:
z otaczającą „$ ()” uruchamiana jest podpowłoka, dlatego można użyć Control-C do zakończenia pętli w przypadku, gdy host nie będzie dostępny.
źródło