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

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

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

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

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



답변

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

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


답변

최대 시도 횟수를 제한하고 싶었습니다. 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


답변

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

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

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


답변

백틱의 사용 ` `오래되었습니다 . 사용 $( )하는 대신 :

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


답변

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

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

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


답변

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

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


답변