컬을 사용하여 웹페이지에서 상태 확인 수행

컬을 사용하여 웹페이지에서 상태 확인 수행

특정 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 블록을 일부 변경하면 필요한 경우 다른 상태 코드를 쉽게 테스트할 수 있습니다.

관련 정보