컬 요청 성공 후 Bash while 루프가 중지됨

컬 요청 성공 후 Bash while 루프가 중지됨

저는 현재 bash 스크립트 작성 방법을 배우고 있습니다. 내 컬 요청이 200 응답 코드를 받으면 while 루프를 어떻게 중지합니까?

aws --endpoint-url http://s3.sample.com/ s3 cp hello.php s3://bucket/
while [ true ]
do
    curl http://sample.com/hello.php &> /dev/null
done

답변1

수락된 답변제안된 중복 대상curl서버 오류가 발생하면 실패하고 22종료 상태를 반환하는 방법을 보여줍니다 . 이를 바탕으로 다음과 같이 작성할 수 있습니다.

until curl -s -f -o /dev/null "http://example.com/foo.html"
do
  sleep 5
done

" curl요청한 전송이 성공적으로 완료될 때까지 5초 동안 기다린 후 다시 시도하십시오." 라는 메시지가 나타납니다. 응답 내용에 관심이 없다고 가정하면 오류 발생 시 서버가 -f실패하여 메시지와 진행률 표시기가 인쇄되지 않도록 합니다 .curl-s-o /dev/null

그러나 curl자체적으로 재시도하는 기능에는 셸 루프가 필요하지 않습니다. 예를 들어, 10번 재시도하고 재시도하기 전에 5초 동안 휴면 상태로 만들려면 다음을 수행하세요.

curl --retry 10 --retry-delay 5 -s -o /dev/null "http://example.com/foo.html"

또는 일시적이지 않은 HTTP 오류(예: 404)에도 재시도하려는 경우:

curl --retry 10 -f --retry-all-errors --retry-delay 5 \
  -s -o /dev/null "http://example.com/foo.html"

curl대신 응답에 특정 HTTP 상태가 표시될 때까지 실행하려는 경우 :

until [ \
  "$(curl -s -w '%{http_code}' -o /dev/null "http://example.com/foo.html")" \
  -eq 200 ]
do
  sleep 5
done

-w전송이 완료된 후 curl형식 문자열(여기)에 지정된 정보가 표시됨을 나타냅니다.%{http_code}

답변2

if 문에서 컬의 반환 코드를 사용하여 exit루프를 실행할 수 있습니다.

while [ true ]
do
    curl http://sample.com/hello.php &> /dev/null
    if [[ "$?" -eq 0 ]]; then
        exit 0
    fi
done

어떤 이유로 루프 이후에 스크립트를 계속 실행하려면 를 사용할 수 break있습니다 exit.

while [ true ]
do
    curl http://sample.com/hello.php &> /dev/null
    if [[ "$?" -eq 0 ]]; then
        break
    fi
done
echo "I made it out of the loop"

관련 정보