ubuntu如何自动监测网络连接?
之前介绍了利用update-rc.d管理ubuntu开机启动运行的程序,链接见:update-rc.d管理ubuntu开机启动程序,解决方法是开机启动自动连接vpn,这种方法可能导致vpn进程僵死状态,因为vpn的链接是跟网卡状态相关的。
本节介绍一种联网后自动运行自定义程序的方法,一起来了解下。
概要
在Debian/Ubuntu的发行版本里,网络建立前、后和网络断开前、后都会到/etc/network/里运行相应目录下的脚本
 
思路
1)在网络建立后,在/etc/network/if-up.d/目录下增加一个自动连接vpn的脚本,保证只要是联网状态下就可以连接vpn服务。
 
2)在网络断开前,结束掉所有的vpn进程,防止程序出现bug
首先,说一个bug,ubuntu的/etc/network/if-down.d/和/etc/network/if-post-down.d/目录下的脚本并不会在网络断开时执行,原因我google也没找到
可以考虑写个监测脚本检测网络是否畅通,如果网络down掉则kill掉所有的vpn进程即可,然后crontab定时运行。
脚本代码:
 
#!/bin/bash  
  
#变量定义  
urls=("www.baidu.com" "www.sogou.com" "www.soso.com")  
http_code=("200" "301" "302" "404")  
count=${#urls[*]}  
connected=0 
#检测网络  
for ((i = 0; i < $count; i ++))  
do  
    url=${urls[$i]}  
    result=$(curl -o /dev/null -s -m 10 -w %{http_code} $url)  
    for flag in ${http_code[*]}  
    do  
        if [ $flag = $result ];then  
            connected=$(expr $connected + 1)  
        fi  
    done  
done  
  
#网络down时kill所有vpn进程  
if [ $connected -eq 0 ];then  
    vpn_pids=$(ps -aux |grep -i 'openvpn'|grep -v 'grep'|linuxjishu/13830.html target=_blank class=infotextkey>awk '{print $2}')  
    for pid in ${vpn_pids[*]}  
    do  
        kill -9 $pid  
    done  
fi 
使用crontab配置个定时计划任务。
crontab定时运行: