连网后自动运行程序

此页由Linux Wiki用户Chenxing于2012年6月7日 (星期四) 17:43的最后更改。

出自Linux Wiki

提示:此文已超过 12 年(4582 天)未更新,如发现内容过时或有误,欢迎改进:)

网络连接建立后运行的脚本可以实现诸多实用功能,如动态域名绑定、连接VPN、上网认证等。

实现这一目标的大体思路有两种:在基于NetworkManager的系统中,可配置其dispatcher脚本;而一般地,也可依赖不同Linux发行版提供的工具实现。

目录

Network-Manager

目前在桌面环境中Network-Manager的使用很普遍。Network-Manager在网络连接建立或断开时会自动运行/etc/NetworkManager/dispatcher.d/中的文件。只要写一个脚本放在该文件夹下,即可实现连接建立时自动运行程序。下面是OpenNtpd的例子[1]

#!/bin/sh
 
INTERFACE=$1 # 状态发生变化的网络接口
STATUS=$2 # 网络接口的新状态:up, down, vpn-up, vpn-down
 
case "$STATUS" in
    'up') # $INTERFACE is up
	exec /etc/rc.d/openntpd start
	;;
    'down') # $INTERFACE is down
	# Check for active interface and down if no one active
	if [ ! `nm-tool|grep State|cut -f2 -d' '` = "connected" ]; then
		exec /etc/rc.d/openntpd stop
	fi
	;;
esac

发行版相关的解决方案

Debian/Ubuntu

Debian系列发行版的配置较为简便。所有的if-up脚本放在/etc/network/if-up.d,只需要将写好的脚本放在/etc/network/if-up.d/,并添加可执行权限即可:

chmod 755 /etc/network/if-up.d/YOUR_SCRIPT
Note.gif
TODO:
/etc/network/if-down.d/中的脚本并不能在系统断开网络前执行,如何添加系统关闭网络接口前的脚本呢?

openSUSE

openSUSE中与网络有关的脚本应被存放在/etc/sysconfig/network/scripts/。而连网后执行的脚本则放在/etc/sysconfig/network/if-up.d/,它们是到/etc/sysconfig/network/scripts/符号链接。举个例子,如果你已经有一个脚本文件YOUR_SCRIPT,需要做如下操作:

cp YOUR_SCRIPT /etc/sysconfig/network/scripts/
 chmod 755 /etc/sysconfig/network/scripts/YOUR_SCRIPT
 ln -s /etc/sysconfig/network/scripts/YOUR_SCRIPT /etc/sysconfig/network/if-up.d/

Fedora

Fedora对这一功能支持的不是很好,只能在网络连接建立后运行一个脚本,即/sbin/ifup-local。这个文件默认不存在,需要手动创建。下面的例子用vi编辑/创建这个文件,并添加执行权限。

# vi /sbin/ifup-local
# chmod 755 /sbin/ifup-local

参考资料

  1. ArchWiki: NetworkManager

本文对您有帮助?分享给更多朋友!

反馈与讨论

发现文档不全面、有错误却没时间编辑文档?想分享自己的经验或见解?欢迎在此留言、讨论。
个人工具
简体繁体转换