一个自动脚本shutdown -r now在一台机器上运行shutdown -r now ,在延迟30秒后,使用ping来确定机器何时可用。 我最近将操作系统从Centos 5切换到Oracle Linux 6,发现ping的行为已经改变。
我使用ping(count)(-c10),截止date(-w360)和延迟(-W1),这应该等待最多五分钟,以便从机器发出十次成功的回复。
我观察到我自己的机器在30秒Destination Host Unreachable消息,导致3次错误之后即会退出。 远在我期望的期限值之前。 例如〜37秒后退出:
[cs@bst1 ~]# time ping -c10 -w360 -W1 hostother; echo $? PING hostother (10.210.51.155) 56(84) bytes of data. From bst1 (10.210.51.139) icmp_seq=36 Destination Host Unreachable From bst1 (10.210.51.139) icmp_seq=37 Destination Host Unreachable From bst1 (10.210.51.139) icmp_seq=38 Destination Host Unreachable --- hostother ping statistics --- 38 packets transmitted, 0 received, +3 errors, 100% packet loss, time 37008ms pipe 3 real 0m37.010s user 0m0.001s sys 0m0.000s 1
这似乎与man ping :
如果ping完全没有收到任何回复数据包,它将以代码1退出。如果指定了数据包计数和最后期限,并且在截止时间到达之前收到的计数数据包数less于该数据包,它将以代码1退出。在其他错误中,它以代码2退出。否则以代码0退出。这使得可以使用退出代码来查看主机是否处于活动状态。
1)面对与手册页一致的ICMP错误,ping的行为是? 看来在错误条件下返回码应该是2。
2)是否有可能阻止我自己的机器使用这些Destination Host Unreachable消息跳入?
如果我重新运行ping几次,它最终会看到主机并完全退出(返回代码0)。
我build议你渗透远离ping的超时,并使用timeout命令(coreutils的一部分):
timeout 300s bash -c "until ping -c10 hostother; do false; done"
如果命令超时,你将得到124作为返回码; 例如,如果在5分钟内连续10次ping不成功,如果ping成功,则为0 。
我知道这并没有真正回答这个问题(我承认ping手册页不是很清楚),但希望能解决你的问题。
1)是的,PING的行为是一致的。 “目标主机不可达”可能意味着一些事情,但其中之一是“ 该主机有一个地址,表明它在我的局域网上,但它不响应ARP请求,我没有有效的ARPcaching条目 ” 。
这里是我在我的局域网上ping一些东西,并显示它没有ARPcaching项:
[me@risby]$ ping 192.168.3.244 PING 192.168.3.244 (192.168.3.244) 56(84) bytes of data. From 192.168.3.11 icmp_seq=1 Destination Host Unreachable From 192.168.3.11 icmp_seq=2 Destination Host Unreachable From 192.168.3.11 icmp_seq=3 Destination Host Unreachable [...] [me@risby]$ arp -a -n|grep 244 ? (192.168.3.244) at <incomplete> on p1p1
PING不会产生错误2,因为确实没有收到回复数据包。 这也不是PING的问题。 它已经要求内核发送icmp echo-requests,内核已经表示不能这样做。 这里有一个错误2的例子,即“ 我,PING,根本不能执行这些指令;我放弃了球 ”:
[me@risby]$ ping -c 3 192.168.3.999 ping: unknown host 192.168.3.999 [me@risby]$ echo $? 2
2)不
正如其他人暗示的那样,你select了错误的方式来testing主机是否处于closures状态,而不是ICMP-echo-request-unresponsive。