Linux 如何使用Bash脚本发送Internet连接警报?

Linux 如何使用Bash脚本发送Internet连接警报?,linux,bash,shell,monitoring,ping,Linux,Bash,Shell,Monitoring,Ping,我有一个脆弱的互联网连接,所以我决定制作一个bash脚本,在互联网恢复时提醒我。以下是脚本: #!/bin/bash # set -x while [ 1 ];do STATUS_CURRENT=$(ping -q -w 1 -c 1 google.com > /dev/null && echo connected || echo disconnected) if [[ $STATUS_CURRENT == "connected" && $S

我有一个脆弱的互联网连接,所以我决定制作一个bash脚本,在互联网恢复时提醒我。以下是脚本:

#!/bin/bash
# set -x


while [ 1 ];do
  STATUS_CURRENT=$(ping -q -w 1 -c 1 google.com > /dev/null && echo connected || echo disconnected)
  if [[ $STATUS_CURRENT == "connected"  &&  $STATUS_LAST != "connected" ]];then
        aplay /home/user/bin/online.wav
        notify-send "We've connected"

 elif [[ $STATUS_CURRENT == "disconnected"  &&  $STATUS_LAST == "connected"  ]];then
       aplay /home/user/bin/offline.wav
       notify-send "Disconnected now"
  fi

   STATUS_LAST=$STATUS_CURRENT
   sleep 2
done
我在
/etc/rc.local
中添加了这个,以便在启动时执行它。这个脚本的问题是它有时会失败。即使存在Internet连接,脚本也会发送通知说它已断开连接(紧接着是“已连接”消息)

我怎样才能避免这个问题?它是否与
ping
失败速度慢这一事实有关?如何改进脚本?

使用“netcat”,它对我来说工作非常稳定

#!/bin/bash

status=0

do_on=("/home/user/bin/online.wav"
       "We've connected")

do_off=("/home/user/bin/offline.wav"
        "Disconnected now")

while [ 1 ] ;do
    nc -zw 2 google.de 80
    ret="$?"

    if [ "$ret" = 0 -a "$status" = 0 ] ;then
        aplay ${do_on[0]}
        notify-send ${do_on[1]}
        status=1

    elif [ "$ret" -ne 0 -a "$status" = 1 ] ;then
        aplay ${do_off[0]}
        notify-send ${do_off[1]}
        status=0 ;fi

    sleep 2 ;done
你应该提前测试你的DNS服务器


干杯,卡里姆

你至少应该ping不止一次。如中所示,增加
-c
value@arco444:谢谢,我以前确实试过,但这只会导致脚本根本不起作用。但是我不知道为什么会这样。您还需要增加
-w
值。不管怎么说,这可能是你问题的根源,你很可能会偶尔得到一个超过1秒的回复。如果脚本接收到其中一个,它将感知到连接已断开。