我有一个 shell 脚本,用于监视实时服务器集群上的加载时间和响应代码。它每 5 分钟总共运行 250 次迭代,分布在 10 个服务器和 6 个站点上。它使用带有 -w 标志的 curl 来返回相关信息,然后由我的 shell 脚本解析:
curl -svw 'monitor_load_times %{time_total} %{http_code}' -b 'server=$server' -m 15 -o /dev/null $url 2>&1
Run Code Online (Sandbox Code Playgroud)
然后,该信息由可以显示许多不同响应的图形脚本进行解析。但是,curl 偶尔会返回响应代码“000”。发生这种情况时,尽管分布在多次迭代中,但它似乎同时发生了多次:
我想要解决的是,这是否是一个客户端问题会影响我的结果,或者它是否实际上表明服务器端问题影响了我的整个集群。000 是否表示连接已断开?与具有该响应代码的 curl 迭代对应的数据库条目为 time_total 值返回“0.000”。我发现 curl 返回代码 000 的所有搜索结果都与不受支持的 HTTPS 相关,但我所有的测试 URL 都是 HTTP。
(500 个错误的激增是一个完全无关的问题,昨晚影响了我的服务器。)
Mik*_*kel 21
响应 000 表示 cURL 由于某种原因未能执行。在这种情况下,您应该测试 cURL 退出代码而不是做出假设。有关退出代码及其含义的完整列表,请参阅curl 联机帮助页的“退出代码”部分。
$ curl -w "%{http_code}\n" http://example.invalid/ ; echo "Exit code: $?"
000
curl: (6) Could not resolve host: example.invalid
Exit code: 6
Run Code Online (Sandbox Code Playgroud)
(如ILIV所回答)
$ curl -w "%{http_code}\n" http://localhost:81/ ; echo "Exit code: $?"
000
curl: (7) Failed to connect to localhost port 81: Connection refused
Exit code: 7
Run Code Online (Sandbox Code Playgroud)
$ curl -w "%{http_code}\n" -m 5 http://10.255.255.1/ ; echo "Exit code: $?"
000
curl: (28) Connection timed out after 5001 milliseconds
Exit code: 28
Run Code Online (Sandbox Code Playgroud)
(正如阿伦回答的那样)
启动一个假服务器:
$ nc -l -p 65535 & <<EOF
> HTTP/1.1 000 Fake Status Code
> Content-Length: 0
> Connection: close
>
> EOF
Run Code Online (Sandbox Code Playgroud)
客户要求:
$ curl -w "%{http_code}\n" http://localhost:65535/ ; echo "Exit code: $?"
000
Exit code: 0
Run Code Online (Sandbox Code Playgroud)
不知道为什么这会发生在现实世界中,但是嘿。如果 cURL 根本没有获得有效的状态代码,则假定为 200。
归档时间: |
|
查看次数: |
32914 次 |
最近记录: |