Ubuntu 联网后自动运行程序 监测网络连接

本文介绍在Ubuntu系统中如何实现网络连接成功后自动启动VPN,并在网络断开时自动终止VPN进程的方法。通过在特定目录下放置Shell脚本来监控网络状态变化,确保网络可用时VPN连接有效。

前言

之前的一篇博客介绍了利用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
  1. 首先,说一个bug,ubuntu的/etc/network/if-down.d/和/etc/network/if-post-down.d/目录下的脚本并不会在网络断开时执行,原因我google也没找到
  2. 强调,千万不要思维定式,花了几个小时的时间解决这个问题就是思维定式了,可以考虑写个监测脚本检测网络是否畅通,如果网络down掉则kill掉所有的vpn进程即可,然后crontab定时运行就ok了,上脚本代码
#!/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'|awk '{print $2}')
	for pid in ${vpn_pids[*]}
	do
		kill -9 $pid
	done
fi

crontab定时运行

* * * * * monitor_scripts


后记

大家有更好的方法欢迎留言了,希望跟大家探讨!
### Ubuntu系统中配置和连接网讯网卡的方法 在Ubuntu系统中配置和连接网讯网卡通常涉及以下几个方面的工作:驱动安装、模块加载以及网络接口的初始化。 #### 1. 安装驱动程序 对于特定型号的网讯网卡(如PR1000P2SFP-A),需要先确认其硬件ID并下载对应的Linux驱动程序。如果官方未提供适用于Linux环境的原生驱动,则可以尝试使用`ndiswrapper`工具调用Windows平台上的驱动程序[^1]。然而,在大多数情况下,推荐优先寻找针对Linux优化过的开源驱动方案。 完成驱动编译后,生成的目标`.ko`文件会被放置于系统的`/lib/modules/`路径下。此时需执行以下命令使新驱动生效: ```bash sudo depmod -a sudo modprobe <driver_name> ``` 随后可通过重启计算机或者手动运行上述指令让操作系统识别新增加的硬件资源[^3]。 #### 2. 初始化网络接口 当成功装载好驱动之后,利用`ifconfig -a`查看当前可用的所有网络适配器列表,其中应该包含刚添加进去的那个设备节点名称[^5]。假设该节点被命名为ethX形式的话: 设置静态IP地址为例: ```bash sudo ip addr add <your_ip_address>/<subnet_mask> dev ethX sudo ip link set up dev ethX ``` 如果是动态获取IP的情况则启用DHCP客户端服务即可: ```bash sudo dhclient ethX ``` 另外还需注意检查是否存在任何潜在错误或数据包丢失现象,这可以通过下面这条语句实现监控目的[^2]: ```bash watch 'ethtool -S ethX | grep -E "error|drop"' ``` 以上操作完成后便能够正常使用所接入的新闻网络端口了。 #### 3. 故障排查指南 假如遇到无法正常联网的情形,请按照如下步骤逐一排除可能原因: - 确认BIOS里已开启对应PCI插槽支持; - 更新至最新版本内核以获得更好的兼容性表现; - 对照文档仔细校验每一步骤是否遗漏重要环节; 最后提醒一点,每当修改过核心组件参数设定以后都建议重新启动一次机器以便彻底刷新状态缓存记录[^4]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值