使用curl对网页进行健康检查

使用curl对网页进行健康检查

我想通过调用特定的 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

我尝试查看卷曲选项,但我找不到任何适合您希望它在成功时保持沉默但在错误时发出噪音的情况的任何内容。

有没有办法让curl做我想要的事情或者我应该考虑其他一些工具?

答案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

您可以从curl 捕获网络计时统计信息。请求/响应周期中每个阶段的延迟对于确定运行状况很有用。

$ 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 块进行一些更改,则可以根据需要轻松测试其他状态代码

相关内容