웹 서버가 응답하기를 기다리는 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 코드가 필요한지 모르겠습니다.