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-localcalled 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-eth0called 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示例:
##代码##