CentOS 7如何设置当网口激活时,执行相应的脚本?

时间:2019-11-20 08:53:06  来源:igfitidea点击:

在CentOS 7/RHEL 7中,当网络接口启动时,如何立即运行某个shell脚本或者程序?
在CentOS 7如何运行ifup-post或ifup-pre脚本?(在CentOS 6中运行没问题。)

解决方案

如果启用了NetworkManager,ifup和friends脚本不会运行。
默认设置是允许在CentOS或RHEL 7服务器上使用NetworkManager。

要解决这个问题,您可以禁用NetworkManager并使用CentOS 6.x或更早版本中的所有现有脚本。
如果需要使用NetworkManager,则需要将脚本放在/etc/NetworkManager/dispatcher.d/目录中。

CentOS 7使用网络管理器时,当网络接口启动时运行脚本

当网口etho0启动并运行时,网络管理器(nm)将运行脚本ifup-local。

ifup-local脚本示例

创建一个shell脚本

$ sudo vim /etc/NetworkManager/dispatcher.d/ifup-local

内容如下:

#!/bin/sh
 
INF="" # 当前的接口名称如 eth0, wlp4s0 等
STA="" # UP或者DOWN的状态
 
# 记录信息到 /var/log/messages 
logger "
$ chmod +x /etc/NetworkManager/dispatcher.d/ifup-local
called for interface named $INF with $STA ..."   # 如果是eth0网口,则调用另外一个脚本 case "$INF" in eth0) logger "Setting up $INF ip address..."; /root/bin/setup.eth0.ips ;; esac exit 0

给脚本设置权限:

$ sudo cat /root/bin/setup.eth0.ips

查看eth0.ips内容

#!/bin/bash
#/sbin/iptables -I FORWARD 1 -m state -s 192.168.2.0/24 -d 192.168.122.0/24 --state NEW,RELATED,ESTABLISHED -j ACCEPT
#
INF="" # 当前的接口名称
STA="" # 接口状态
 
# 记录信息到 /var/log/messages 
logger "
# vi /etc/sysconfig/network-scripts/ifcfg-eth0
called for interface named $INF with $STA ..."   if [ "$INF" == "wlp4s0" ] then start=201 for i in {0..10} do /usr/sbin/ifconfig wlp4s0:${i} 192.168.2.${start} (( start++ )) done fi

输出示例:

NM_CONTROLLED=no

每当eth0接口启动时,脚本/etc/NetworkManager/dispatcher.d/ifup-local就会运行。

同样,当网络接口出现故障时,将调用ifdown-local脚本。

CentOS 7禁用网络管理器(nm)时运行ifup-local脚本

要禁用nm,请在/etc/sysconfig/network-scripts/ifcfg-eth0中将NM_CONTROLLED设置为no:

#!/bin/sh
IN=""
STATUS=""
case "" in
	eth0)
	logger "##代码##: Working on eth0 with $STATUS ..."
	/sbin/ethtool -K eth0 gso off
	;;
 
	eth1)
	logger "##代码##: Working on eth1 with $STATUS ..."
	/sbin/ethtool -G eth1 rx 4096 tx 4096
	/sbin/ethtool -K eth1 gso off
	;;
 
	eth2)
	logger "##代码##: Working on eth2 with $STATUS ..."
	start=201
	for i in {0..10}
	do
		/usr/sbin/ifconfig eth2:${i} 192.168.2.${start}
		(( start++ ))
	done
 
esac
exit 0
##代码##

默认情况下,NM_CONTROLLED设置为yes。

如果设置为no,NetworkManager将忽略此设备,因此它将运行/sbin/ifup-local。

这是/sbin/ifup-local示例:

##代码##