Centos系统下载大全 | Redhat系统下载大全 | Windows2012系统下载大全 | Windows2008系统下载大全| CMS教程 | 网站地图 51运维网-专注Linux/Unix系统安全运维!
当前位置:51运维网 > 系统 > RedHat > 正文

ubuntu如何自动监测网络连接?方法教程

时间:2015-02-05 17:04 来源:网络整理 作者:51ou.com 阅读:

ubuntu如何自动监测网络连接?

之前介绍了利用update-rc.d管理ubuntu开机启动运行的程序,链接见:update-rc.d管理ubuntu开机启动程序,解决方法是开机启动自动连接vpn,这种方法可能导致vpn进程僵死状态,因为vpn的链接是跟网卡状态相关的。

本节介绍一种联网后自动运行自定义程序的方法,一起来了解下。

概要
在Debian/Ubuntu的发行版本里,网络建立前、后和网络断开前、后都会到/etc/network/里运行相应目录下的脚本
 

if-down.d -- 网络关闭前
if-post-down.d -- 网络关闭后
if-pre-up.d -- 网络建立前
if-up.d -- 网络建立后

思路
1)在网络建立后,在/etc/network/if-up.d/目录下增加一个自动连接vpn的脚本,保证只要是联网状态下就可以连接vpn服务。
 

#!/bin/bash 
 
#变量定义 
PATH=/sbin:/usr/sbin:/bin:/usr/bin 
config_path="/home/wangzhengyi/cloud-1/openvpn-client.ovpn" 
 
#导入环境变量 
. /lib/lsb/init-functions 
export PATH=$PATH 
 
#网络建立后运行openvpn 
log_daemon_msg "starting client openvpn" 
nohup openvpn $config_path 

2)在网络断开前,结束掉所有的vpn进程,防止程序出现bug
首先,说一个bug,ubuntu的/etc/network/if-down.d/和/etc/network/if-post-down.d/目录下的脚本并不会在网络断开时执行,原因我google也没找到
可以考虑写个监测脚本检测网络是否畅通,如果网络down掉则kill掉所有的vpn进程即可,然后crontab定时运行。

脚本代码:
 

复制代码 代码示例:

#!/bin/bash 
 
#变量定义 
urls=("" "" "") 
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'|awk '{print $2}') 
    for pid in ${vpn_pids[*]} 
    do 
        kill -9 $pid 
    done 
fi 

使用crontab配置个定时计划任务。

crontab定时运行:
 

* * * * * monitor_scripts 

感谢您对【51运维网 http://www.51ou.com/】的支持,我们为您免费提供《ubuntu如何自动监测网络连接?方法教程》技术文章,《ubuntu如何自动监测网络连接?方法教程》详细使用和说明,有时《ubuntu如何自动监测网络连接?方法教程》可能不完善、敬请谅解!如果《ubuntu如何自动监测网络连接?方法教程》有错误请给我们留言,我们将尽快修复文章错误,如果您觉得本站不错,请分享给周围的朋友!谢谢!

顶一下
(0)
0%
踩一下
(0)
0%
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
验证码:点击我更换图片