웹 서버가 응답하기를 기다리는 bash에서 루프를 만드는 방법은 무엇입니까?


105

웹 서버가 응답하기를 기다리는 bash에서 루프를 만드는 방법은 무엇입니까?

"."가 인쇄되어야합니다. 10 초마다 서버가 응답을 시작할 때까지 기다리십시오.

업데이트,이 코드는 서버에서 좋은 응답을 받는지 테스트합니다.

만약 curl --output / dev / null --silent --head --fail "$ url"; 그때
  echo "URL 존재 : $ url"
그밖에
  echo "URL이 존재하지 않습니다 : $ url"
fi

서버가 응답하기를 기다리는 방법에 대해 더 구체적으로 설명 할 수 있습니까?
chepner

서버가 응답하지 않거나 200 응답과 다른 응답을하는 한 서버가 준비되지 않은 것으로 간주합니다.
소린

답변:


173

질문을 chepner의 답변과 결합하면 이것은 나를 위해 일했습니다.

until $(curl --output /dev/null --silent --head --fail http://myhost:myport); do
    printf '.'
    sleep 5
done

10
백틱``의 사용은 구식 입니다. $( )대신 사용하십시오 .
Serge Stroobandt 2014

6
포기하기 전에 최대 대기 시간 수있는 좋은 확장 될 것이다
tkruse을

왜 필요한 --head가요?
lexicore

3
@lexicore 본문은이 명령에 대해 흥미롭지 않으므로 헤드 만 요청합니다 (서버 상태에 대한 더 많은 항목을 확인하는 논리를 포함 할 수 있음). 나가도 --head아무것도 변경되지 않지만 응답 내용 (예 : status.html)에 대한 논리를 연습하려면 할 수 있습니다.
Thomas Ferris Nicolaisen

1
--head항상 사용하는 특정 경우가 405있습니다. 작동하려면 제거해야했습니다
Ron Harlev

38

최대 시도 횟수를 제한하고 싶었습니다. Thomas의 대답을 바탕으로 다음과 같이 만들었습니다.

attempt_counter=0
max_attempts=5

until $(curl --output /dev/null --silent --head --fail http://myhost:myport); do
    if [ ${attempt_counter} -eq ${max_attempts} ];then
      echo "Max attempts reached"
      exit 1
    fi

    printf '.'
    attempt_counter=$(($attempt_counter+1))
    sleep 5
done

나는 --max-time 5어떤 이유로 링크 시간 초과 요청 을 추가 하는 것이 좋습니다
Enigo

16

httping은 이것에 좋습니다. 간단하고 깨끗하며 조용합니다.

while ! httping -qc1 http://myhost:myport ; do sleep 1 ; done

등은 개인적인 환경입니다.


2
제 생각에, 영원히 긴 시간이다 ... for i in 서열 60; do httping -qc1 http://myhost:myport && echo && break sleep 5 echo -n ${i}.. done
브루스 에지


0

재미있는 퍼즐. 클라이언트에 대한 액세스 또는 비동기 API가없는 경우 다음과 같이 tcp 소켓을 찾아 볼 수 있습니다.

until grep '***IPV4 ADDRESS OF SERVER IN REVERSE HEX***' /proc/net/tcp
do
  printf '.'
  sleep 1
done

그러나 그것은 1 초 간격으로 바쁜 대기입니다. 그보다 더 많은 해상도를 원할 것입니다. 또한 이것은 글로벌입니다. 해당 서버에 다른 연결이 설정되면 결과가 유효하지 않습니다.


-1

서버를 사용할 수 있는지, 원인이 다시 시작되는지 확인해야하는 경우 서버에 wget을 만들고 응답 또는 오류를 구문 분석 할 수 있습니다. 200 또는 404가 표시되면 서버가 작동 중입니다. --timeout = seconds로 wget 타임 아웃을 변경할 수 있습니다. 타임 아웃을 10 초로 설정하고 응답에 대한 grep이 결과를 얻을 때까지 루프를 만들 수 있습니다.

이것이 당신이 찾고있는 것인지 또는 정말로 bash 코드가 필요한지 모르겠습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.