最可靠方式是用 curl -o /dev/null -s -w "%{http_code}" url 获取纯状态码,再用 if 判断是否为200;需加超时、重试及业务级校验以确保服务真正健康。

直接用 curl 获取状态码并结合 if 判断,是最常用、最可靠的方式。关键不是“有没有返回”,而是“返回的状态码是不是 200”——这代表 HTTP 层面请求成功,接口可响应。
用 -w + -o /dev/null 提取纯状态码
这是脚本中最推荐的方法:不输出响应体或头,只拿到数字状态码,干净、稳定、易判断。
-
curl -o /dev/null -s -w "%{http_code}" http://example.com/health→ 直接打印类似200或502 - 在 if 中使用时,建议用命令替换捕获结果:
status=$(curl -o /dev/null -s -w "%{http_code}" http://example.com/health)if [ "$status" = "200" ]; then ... fi - 注意加双引号避免空值或空格导致语法错误;
-s静默错误信息,适合自动化场景
用 -I 获取响应头再解析第一行
适合需要同时检查响应头字段(如 Content-Type)的场景,但提取状态码稍多一步。
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
-
curl -Is http://example.com/health | head -n1 | cut -d' ' -f2→ 取出状态码数字 - 实际脚本中可写成:
status=$(curl -Is http://example.com/health 2>/dev/null | head -n1 | cut -d' ' -f2)if [[ $status == 200 ]]; then ... fi - 注意加
2>/dev/null屏蔽 DNS 失败、连接超时等报错,否则可能干扰管道输出
配合超时和重试提升健壮性
生产环境不能只看一次请求,网络抖动或瞬时失败很常见。
- 加
-m 5设置 5 秒总超时,防卡死:curl -m 5 -o /dev/null -s -w "%{http_code}" http://example.com/health - 简单重试可用
for循环,例如最多试 3 次:for i in {1..3}; do status=$(curl -m 5 -o /dev/null -s -w "%{http_code}" url); [ "$status" = "200" ] && break; sleep 1; done - 不建议依赖
grep -q "200"匹配响应体——接口可能返回 200 但内容异常,也可能返回 500 但 body 里含 “200” 字样,不可靠
区分“能连上”和“服务正常”的逻辑
200 是应用层健康信号,但不是唯一指标。别把端口通(telnet host port)、进程在(ps aux | grep app)、接口返回 200 混为一谈。
- 仅返回 200 ≠ 业务逻辑正确(比如登录接口返回 200 但 token 为空)
- 建议搭配轻量级业务校验,例如:
curl -s http://example.com/health | grep -q '"status":"ok"' - 真正关键的接口,应设计专属健康检查路径(如
/healthz),返回结构化 JSON 并包含依赖组件状态










