当我ping一个站点时,它返回“Request timed out”。当这台服务器再次上线时,我想制作一个可以通知我的小程序(声音嘟嘟声或类似的东西)。无论用哪种语言。我认为它应该是非常简单的脚本,有几行代码。那怎么写呢?
答案 0 :(得分:3)
某些ping操作允许您指定收据后退出的条件:
在Mac OS X上,使用ping -a -o $the_host
ping
将继续尝试(默认情况下)-a
表示收到数据包时发出蜂鸣声-o
表示收到数据包时退出在Linux(至少是Ubuntu)上,使用ping -a -c 1 -w inf $the_host
-a
表示收到数据包时发出蜂鸣声-c 1
指定退出前发送的数据包数(在本例中为1)-w inf
指定ping退出的截止日期(无论如何是无限的)-c
和-w
一起使用时,-c
会在退出前变为已收到的数据包数可以链接以执行下一个命令,例如在它出现时立即进入服务器(允许sshd
实际启动之间有间隙):
# ping -a -o $the_host && sleep 3 && ssh $the_host
答案 1 :(得分:1)
不要忘记通知声音,如 echo“^ G”!只是为了与众不同 - 这是Windows批处理:
C:\> more pingnotify.bat
:AGAIN
ping -n 1 %1%
IF ERRORLEVEL 1 GOTO AGAIN
sndrec32 /play /close "C:\Windows\Media\Notify.wav"
C:\> pingnotify.bat localhost
:)
答案 2 :(得分:0)
一种方法是运行ping
是一个循环,例如
while ! ping -c 1 host; do sleep 1; done
(如果你想让它保持安静,你可以将输出重定向到/dev/null
。)
在某些系统上,例如Mac OS X,ping
也可能有选项-a -o
(根据另一个答案),这将导致它一直持续ping,直到收到响应。但是,许多(大多数?)Linux系统上的ping
没有-o
选项,如果网络返回错误,仍会退出等效的-c 1 -w 0
。
编辑:如果主机没有响应ping或您需要检查某个端口上的服务可用性,您可以在零I / O模式下使用netcat:
while ! nc -w 5 -z host port; do sleep 1; done
-w 5
指定每次尝试的5秒超时。请注意,使用netcat,您甚至可以列出多个端口(或端口范围),以便在其中一些端口可用时进行扫描。
编辑2:上面显示的循环一直在尝试,直到到达主机(或端口)。在它们之后添加警报命令,例如发出哔哔声或弹出一个窗口。