我想通过调用特定的 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 块进行一些更改,则可以根据需要轻松测试其他状态代码