解决方案

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

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

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

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

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

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

# vi /etc/sysconfig/network-scripts/ifcfg-eth0
NM_CONTROLLED=no

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

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

这是/sbin/ifup-local示例:

#!/bin/sh
IN=""
STATUS=""
case "" in
	eth0)
	logger "
$ sudo vim /etc/NetworkManager/dispatcher.d/ifup-local
: Working on eth0 with $STATUS ..." /sbin/ethtool -K eth0 gso off ;;   eth1) logger "
#!/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
: Working on eth1 with $STATUS ..." /sbin/ethtool -G eth1 rx 4096 tx 4096 /sbin/ethtool -K eth1 gso off ;;   eth2) logger "
$ sudo cat /root/bin/setup.eth0.ips
: 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

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

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

ifup-local脚本示例

创建一个shell脚本

#!/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 "##代码## 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

内容如下:

##代码##

给脚本设置权限:

##代码##

查看eth0.ips内容

##代码##

输出示例:

##代码##

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

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

日期:2019-11-20 08:53:06 来源:oir作者:oir