IT story

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

hot-time 2020. 9. 11. 19:39
반응형

웹 서버가 응답하기를 기다리는 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

Interesting puzzle. If you have no access or async api with your client, you can try grepping your tcp sockets like this:

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

But that's a busy wait with 1 sec intervals. You probably want more resolution than that. Also this is global. If another connection is made to that server, your results are invalid.


wait-on is a cross-platform command line utility and Node.js API which will wait for files, ports, sockets, and http(s) resources to become available: https://github.com/jeffbski/wait-on

For example, wait :8080 for 5s and do NEXT_CMD if succeed.

wait-on -t 5000 http-get://localhost:8080/foo && NEXT_CMD

if you need check if the server is available, cause is restarting or something else, you could try to make an wget to the server and parse the response or the error, if you get a 200 or even a 404 the server is up, you could change the wget timeout with --timeout=seconds, You could set timeout to 10 second and make a loop until the grep over the response have a result.

i dont know if this is what you are searching or really you need the bash code.

참고URL : https://stackoverflow.com/questions/11904772/how-to-create-a-loop-in-bash-that-is-waiting-for-a-webserver-to-respond

반응형