当站点(服务器)再次联机时通知我

时间:2010-04-11 02:10:55

标签: network-programming network-protocols

当我ping一个站点时,它返回“Request timed out”。当这台服务器再次上线时,我想制作一个可以通知我的小程序(声音嘟嘟声或类似的东西)。无论用哪种语言。我认为它应该是非常简单的脚本,有几行代码。那怎么写呢?

3 个答案:

答案 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:上面显示的循环一直在尝试,直到到达主机(或端口)。在它们之后添加警报命令,例如发出哔哔声或弹出一个窗口。