특정 URL을 호출하여 서비스의 상태를 확인하고 싶습니다. 가장 쉬운 해결책은 cron을 사용하여 매분마다 확인하는 것입니다. 오류가 발생하면 cron에서 이메일을 보내드립니다.
이를 달성하기 위해 cUrl을 사용해 보았지만 오류가 발생할 때만 메시지를 출력하도록 할 수는 없었습니다. 출력을 /dev/null로 보내려고 하면 진행 보고서가 인쇄됩니다.
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 5559 100 5559 0 0 100k 0 --:--:-- --:--:-- --:--:-- 106k
컬 옵션을 살펴보았지만 성공 시 침묵하고 오류 시 소음을 발생시키려는 상황에 적합한 것을 찾을 수 없습니다.
내가 원하는 것을 수행하기 위해 컬을 얻을 수 있는 방법이나 고려해야 할 다른 도구가 있습니까?
답변1
무엇에 대해 -sSf
? 매뉴얼 페이지에서:
-s/--silent Silent or quiet mode. Do not show progress meter or error messages. Makes Curl mute. -S/--show-error When used with -s it makes curl show an error message if it fails. -f/--fail (HTTP) Fail silently (no output at all) on server errors. This is mostly done to better enable scripts etc to better deal with failed attempts. In normal cases when a HTTP server fails to deliver a document, it returns an HTML document stating so (which often also describes why and more). This flag will prevent curl from outputting that and return error 22. This method is not fail-safe and there are occasions where non-successful response codes will slip through, especially when authentication is involved (response codes 401 and 407).
예를 들어:
curl -sSf http://example.org > /dev/null
답변2
사이트가 살아 있는지 확인하는 가장 쉬운 방법은 다음 방법을 사용하는 것입니다.
curl -Is http://www.google.com | head -n 1
이 반환됩니다 HTTP/1.1 200 OK
. 반환된 결과가 출력과 일치하지 않으면 도움을 요청하세요.
답변3
컬에서 네트워크 타이밍 통계를 캡처할 수 있습니다. 요청/응답 주기 각 단계의 대기 시간은 상태를 확인하는 데 유용합니다.
$ URL=https://example.com
$ curl "$URL" -s -o /dev/null -w \
> "response_code: %{http_code}\n
> dns_time: %{time_namelookup}
> connect_time: %{time_connect}
> pretransfer_time: %{time_pretransfer}
> starttransfer_time: %{time_starttransfer}
> total_time: %{time_total}
> "
response_code: 200
dns_time: 0.029
connect_time: 0.046
pretransfer_time: 0.203
starttransfer_time: 0.212
total_time: 0.212
답변4
Curl에는 매우 구체적인 종료 상태 코드가 있습니다.
이 코드를 확인해 보세요.
#!/bin/bash
##name: site-status.sh
FAIL_CODE=6
check_status(){
LRED="\033[1;31m" # Light Red
LGREEN="\033[1;32m" # Light Green
NC='\033[0m' # No Color
curl -sf "${1}" > /dev/null
if [ ! $? = ${FAIL_CODE} ];then
echo -e "${LGREEN}${1} is online${NC}"
else
echo -e "${LRED}${1} is down${NC}"
fi
}
check_status "${1}"
용법:
$ site-status.sh example.com
결과:
$ example.com is online
노트:
스크립트는 사이트를 확인할 수 있는지만 확인합니다.
웹사이트의 작동 여부에만 관심이 있다면 이 코드가 도움이 될 것입니다.
그러나 if/else 블록을 일부 변경하면 필요한 경우 다른 상태 코드를 쉽게 테스트할 수 있습니다.