网络接口启动时CentOS 7运行脚本(网络管理器)

时间:2020-01-09 10:34:10  来源:igfitidea点击:

我想在CentOS 7/RHEL 7服务器上的网络接口启动后立即运行Shell脚本或其他程序。
我创建了/sbin/ifup-local,但是它不能在CentOS 7机器上使用,但可以在CentOS 6上正常工作。
我在NetworkManager和CentOS 7上使用过。
如何运行ifup-post或ifup-pre脚本?

说明:如果启用了NetworkManager,ifup和friends脚本不会运行。
默认设置是允许在CentOS或RHEL 7服务器上使用NetworkManager。
要解决此问题,您可以禁用NetworkManager并使用CentOS 6.x或更早版本中的所有现有脚本。
但是,如果需要使用NetworkManager,则需要将脚本放在/etc/NetworkManager/dispatcher.d/目录中。
让我们看看如何在网络接口启动后立即使用这两种方法来运行脚本或程序。

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

在此方法1中,当名为wlp4s0的接口启动并运行时,您将使用网络管理器(nm)运行名为ifup-local的脚本。

使用bash/sh case语句的ifup-local脚本示例

使用nano命令或vim命令在CentOS/RHEL 7框上创建一个名为/etc/NetworkManager/dispatcher.d/ifup-local的脚本:

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

附加以下代码:

#!/bin/sh
# Purpose: Setup additional ip or routing when wlp4s0 goes up under GPL v.3.x+
# Author: Hyman Gite {https://www.theitroad.local/
# ----------------------------------------------------------------------------
 
INF="" # your current interface name such as eth0, wlp4s0 and so on
STA="" # status such as UP or DOWN
 
# Send message to /var/log/messages 
logger "
$ chmod +x /etc/NetworkManager/dispatcher.d/ifup-local
called for interface named $INF with $STA ..."   # We just want to work on wlp4s0 interface # When matched called another script called /root/bin/setup.wlp4s0.ips case "$INF" in wlp4s0) logger "Setting up $INF ip address..."; /root/bin/setup.wlp4s0.ips ;; esac exit 0

在vim文本编辑器中保存并关闭文件。
确保对脚本设置正确的权限:

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

这是使用cat命令显示的示例/root/bin/setup.wlp4s0.ips:

#!/bin/bash
# Purpose: Setup additional ip or routing under GPL v.3.x+
# Author: Hyman Gite {https://www.theitroad.local/}
# ----------------------------------------------------------------------------
#/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="" # your current interface name such as eth0, wlp4s0 and so on
STA="" # status such as UP or DOWN
 
# Send message to /var/log/messages 
logger "
# tail -f /var/log/messages
# egrep -i 'Setting up|ifup-local' /var/log/messages
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

输出示例:

#!/bin/bash
# Purpose: Remove additional ip or routing under GPL v.3.x+
# Author: Hyman Gite {https://www.theitroad.local/}
# ----------------------------------------------------------------------------
# take down all ips and delete routing if any
start=201
for i in {0..10}
do
	/usr/sbin/ifconfig wlp4s0:${i} down
	(( start++ ))
done

这两个脚本几乎都是自记录文档,可以快速开发或修改任何人。
这两个脚本几乎都是自记录的,可以快速开发或修改任何人。
每当名为wlp4s0的接口启动时,脚本/etc/NetworkManager/dispatcher.d/ifup-local就会运行。
基于脚本的配置在重新启动后以及网络管理器/服务重新启动时保持不变。
以下是使用logger命令生成的tail命令或grep命令/egrep命令显示的/var/log/messages中的示例日志:

# vi /etc/sysconfig/network-scripts/ifcfg-wlp4s0

关于在网络接口出现故障时创建/sbin/ifdown-local的说明

当网络接口出现故障时,/sbin/ifdown-local将运行。
这是一个示例脚本:

NM_CONTROLLED=no

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

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

#!/bin/sh
# Tested on a CentOS and RHEL version 5/6/7
# Author: Author: Hyman Gite {https://www.theitroad.local/}
# ------------------------------------------------------
#!/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

追加以下

##代码##

保存并关闭文件。
如果设置为no,NetworkManager将忽略此连接/设备,因此它将运行/sbin/ifup-local。
默认情况下,NM_CONTROLLED设置为yes。
这是/sbin/ifup-local示例:

##代码##

如果要在网络接口如上所述发生故障时运行脚本,请创建/sbin/ifdown-local。