連網後自動運行程序

此頁由 Linux Wiki使用者Chenxing 於 2012年6月7日 (星期四) 17:43 的最後更改。

出自Linux Wiki

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

網路連接建立後運行的腳本可以實現諸多實用功能,如動態域名綁定、連接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

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

反馈与讨论

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