Linux 如何使用Bash脚本发送Internet连接警报?
我有一个脆弱的互联网连接,所以我决定制作一个bash脚本,在互联网恢复时提醒我。以下是脚本: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
#!/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秒的回复。如果脚本接收到其中一个,它将感知到连接已断开。