我有一个 ESXi VM,可以在我们网络上的大约 700 台设备上执行命令。它正在使用Expect
,并且由于该设备的使用年限,它们有一段时间的性能不佳。这两个不能很好地混合 - 因为 Expect 脚本在继续之前必须等待很长时间才能获得输出。
为了避免这种情况,我们的团队决定ping
在连接到设备之前进行测试。如果有丢包,我们稍后再讨论。
我们遇到的问题是我们的 ping 测试如下所示:
loss=`ping -i 0.2 -w 2 $1 | grep "packet loss" | awk '{print $6}'`
loss=${loss%?}
echo "$loss"
两秒内 10 次 ping - 但我们得到了很多9% 的丢包响应。例如,由于丢包检测,我们通常有74/700 个测试抢先退出。其中 39/74报告为9%,而其余报告为 10 的倍数。
据我们所知,这并没有什么意义。有 10 个数据包正在发送……如果一个被丢弃,那应该是 10% 的丢失。这种情况很少被观察到,但确实会发生。是否有可能在记忆中发生了导致数字 9 显现的事情?如果这些是数据包丢失的合法实例,那么这对我们来说是个大新闻。
有几个 ping 版本。有些人可以
-w
选择。有些人接受它,但没有记录。在某些版本的 ping 中,会发生这种情况:即:发出一个数据包,时间到期,永远不会收到返回。
因此: 1 包 11 丢失,即丢失 9%。
使用这些 ping 版本,添加一个
-c
选项应该可以解决问题:这意味着:每 0.2 秒尝试一次数据包,直到收到 10 个数据包或直到 5 秒的时间限制已过。