-W 与 -w 分别管什么
Linux iputils 的 ping 默认等待回复时间偏长,跨广域网或目标不响应时,一条探测命令可能拖住整个脚本流程。-W 控制等待每个回复的秒数(支持小数),超时即把该包计为丢失;-w 控制整体截止时间,到点立刻输出统计并退出。两者分工明确:前者决定单个包判丢的尺度,后者保证脚本整体不会无限等待。
基本信息
| 适用平台 | Linux iputils-ping;macOS/BSD 的 -W 单位是毫秒,语义不同 |
|---|---|
| -W | 等待单个回复的秒数,可带小数(如 -W 0.5) |
| -w | 整体截止时间,单位秒,到点结束并输出统计 |
| 组合建议 | 脚本探测用 -c 3 -W 1 -w 5,兼顾判定与总耗时 |
| 退出码 | 0 全部成功;1 有丢包或全部失败;2 出现其他错误(如解析失败或参数非法) |
典型使用场景
- 批量巡检多个目标:每条探测都必须快速返回,否则巡检任务被单个慢目标拖住
- 在故障链路(高延迟、丢包)上取样:按实际 RTT 分布调整 -W,避免把慢而成功的回包误判为丢包
- 脚本根据退出码判断:用 -q 静默模式加退出码做条件分支,输出更干净
- 监控探活:总时长可控,避免探针堆积
- 区分解析失败与不可达:退出码 2 往往指向名称解析或参数问题
脚本化探测
脚本化探测
ping -c 3 -W 1 -w 5 -q 10.0.0.5 >/dev/null; echo "rc=$?" # rc=0 全通,1 有丢包,2 其他错误
# 静默巡检多个目标,逐个给出 OK/FAIL
for t in 10.0.0.5 10.0.0.6 223.5.5.5; do ping -c1 -W1 -q $t >/dev/null && echo "$t OK" || echo "$t FAIL"; done
# 高延迟链路放宽单包等待,避免误判
ping -c 5 -W 3 -w 20 -q 203.0.113.10
# 只看统计行
ping -c 10 -W 1 -w 15 -q 10.0.0.5 | tail -2参数与退出码对照
| 项 | 含义 | 使用建议 |
|---|---|---|
| -W | 单包等待秒数 | 按目标 RTT 的 2-3 倍设置,跨地域链路别设 1 秒 |
| -w | 整体截止时间 | 设为 单包超时 × 包数 × 2 左右,留出缓冲 |
| -c | 发送包数 | 巡检用 1-3,质量评估用 20 以上 |
| -q | 静默输出 | 脚本里必加,只保留统计便于解析 |
| 退出码 1 | 有丢包或全部无响应 | 不等于目标宕机,需结合业务端口验证 |
在确实丢包的链路上把 -W 设成 1 秒,会把「慢但最终成功」的回包算作丢失,评估结果偏悲观;调整前先看 RTT 分布再定阈值。