웹 서버가 응답하기를 기다리는 bash에서 루프를 만드는 방법은 무엇입니까?
웹 서버가 응답하기를 기다리는 bash에서 루프를 만드는 방법은 무엇입니까?
약 10초마다 "."를 인쇄하고 서버가 응답을 시작할 때까지 기다려야 합니다.
업데이트, 이 코드는 내가 서버로부터 좋은 응답을 받는지 테스트합니다.
if curl --output /dev/curl --curl --curl --head --fail "$url"; 다음에코 "URL 존재: $url"또 다른에코 "URL이 없습니다: $url"fi
질문과 쉐프너의 대답을 결합하면, 이것은 저에게 효과가 있었습니다.
until $(curl --output /dev/null --silent --head --fail http://myhost:myport); do
printf '.'
sleep 5
done
최대 시도 횟수를 제한하고 싶었습니다.토마스의 수락된 답변을 바탕으로 저는 다음과 같이 말했습니다.
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
등이 개인적으로 선호될 때까지
포스터는 인쇄에 대한 특정 질문을 합니다..그러나 여기에 오는 대부분의 사람들은 유한 재시도를 지원하는 단일 명령이기 때문에 아래의 해결책을 찾고 있다고 생각합니다.
curl --head -X GET --retry 5 --retry-connrefused --retry-delay 1 http://myhost:myport
백스틱의 사용` `구식입니다.
사용하다$( )대신:
until $(curl --output /dev/null --silent --head --fail http://myhost:myport); do
printf '.'
sleep 5
done
이와 같이 시간 초과 명령과 tcp 명령을 결합할 수도 있습니다.무한 대기 대신 60초 후에 시간 초과됩니다.
timeout 60 bash -c 'until echo > /dev/tcp/myhost/myport; do sleep 5; done'
다음 스니펫:
- 인수의 모든 URL이 200을 반환할 때까지 기다립니다.
- 하나의 URL을 사용할 수 없는 경우 30초 후에 만료됨
- 한 번의 컬로 3초 후에 시간 초과
파일에 저장한 후 일반 스크립트처럼 사용하여 필요한 서비스가 제공될 때까지 기다립니다.
#/bin/bash
##############################################################################################
# Wait for URLs until return HTTP 200
#
# - Just pass as many urls as required to the script - the script will wait for each, one by one
#
# Example: ./wait_for_urls.sh "${MY_VARIABLE}" "http://192.168.56.101:8080"
##############################################################################################
wait-for-url() {
echo "Testing $1"
timeout --foreground -s TERM 30s bash -c \
'while [[ "$(curl -s -o /dev/null -m 3 -L -w ''%{http_code}'' ${0})" != "200" ]];\
do echo "Waiting for ${0}" && sleep 2;\
done' ${1}
echo "${1} - OK!"
}
echo "Wait for URLs: $@"
for var in "$@"; do
wait-for-url "$var"
done
요지: https://gist.github.com/eisenreich/195ab1f05715ec86e300f75d007d711c
printf "Waiting for $HOST:$PORT"
until nc -z $HOST $PORT 2>/dev/null; do
printf '.'
sleep 10
done
echo "up!"
저는 여기서 아이디어를 얻었습니다: https://stackoverflow.com/a/34358304/1121497
흥미로운 퍼즐.클라이언트에 액세스할 수 없거나 비동기 API가 없는 경우 다음과 같이 tcp 소켓을 grep할 수 있습니다.
until grep '***IPV4 ADDRESS OF SERVER IN REVERSE HEX***' /proc/net/tcp
do
printf '.'
sleep 1
done
하지만 그건 1초 간격으로 바쁜 대기 시간입니다.당신은 아마도 그것보다 더 많은 해상도를 원할 것입니다.또한 이것은 세계적입니다.해당 서버에 다른 연결이 이루어진 경우 결과는 유효하지 않습니다.
언급URL : https://stackoverflow.com/questions/11904772/how-to-create-a-loop-in-bash-that-is-waiting-for-a-webserver-to-respond
'programing' 카테고리의 다른 글
| Azure 웹사이트에서 machineKey를 설정하는 방법 (0) | 2023.04.27 |
|---|---|
| 어떻게 MessageBox를 성공적으로 구현했습니까?MVVM에 () 기능을 표시하시겠습니까? (0) | 2023.04.27 |
| VBA에서 "메모리 부족 오류"를 방지하기 위해 메모리를 지우는 방법은 무엇입니까? (0) | 2023.04.27 |
| Azure 파이프라인에서 현재 작업 디렉토리 변경 (0) | 2023.04.27 |
| 터미널 창에서 리눅스로 파일을 만드는 방법은 무엇입니까? (0) | 2023.04.27 |