CentOS 7 Run Script When Network Interface is Up (Network Manager) nixCraft

I want to run a shell script or other program immediately after my network interface goes up on a CentOS 7 / RHEL 7 server. I created /sbin/ifup-local, but it is not working on a CentOS 7 box but works perfectly on CentOS 6. I am using NetworkManager with CentOS 7. How do I run ifup-post or ifup-pre scripts?

Introduction: The ifup and friends script do not run if NetworkManager is enabled. The default is to allow NetworkManager on a CentOS or RHEL 7 server. To solve this problem, you can disable NetworkManager and use all existing scripts from CentOS 6.x or earlier. However, if you need to use NetworkManager, you need to place scripts in /etc/NetworkManager/dispatcher.d/ directory. Let us see how to use both methods to run a script or program immediately after your network interface goes up.

CentOS 7 Run Script When Network Interface is Up When Using Network Manager (nm)

In this method # 1, you are going to use a Network Manager (nm) to run a script called ifup-local when interface named wlp4s0 goes up and running.

An example of an ifup-local script using the bash/sh case statment

Create a script called /etc/NetworkManager/dispatcher.d/ifup-local on a CentOS / RHEL 7 box using the nano command or vim command:
$ sudo vim /etc/NetworkManager/dispatcher.d/ifup-local
Append the following code:

#!/bin/sh
# Purpose: Setup additional ip or routing when wlp4s0 goes up under GPL v.3.x+
# Author: Vivek Gite {https://www.cyberciti.biz/
# ----------------------------------------------------------------------------- INF="$1" # your current interface name such as eth0, wlp4s0 and so on
STA="$2" # status such as UP or DOWN # Send message to /var/log/messages 
logger "$0 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

Save and close the file in vim text editor. Make sure you setup correct permission on your script:
$ chmod +x /etc/NetworkManager/dispatcher.d/ifup-local
Here is a sample /root/bin/setup.wlp4s0.ips displayed using the cat command:
$ sudo cat /root/bin/setup.wlp4s0.ips
Sample outputs:

#!/bin/bash
# Purpose: Setup additional ip or routing under GPL v.3.x+
# Author: Vivek Gite {https://www.cyberciti.biz/}
# -----------------------------------------------------------------------------
#/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="$1" # your current interface name such as eth0, wlp4s0 and so on
STA="$2" # status such as UP or DOWN # Send message to /var/log/messages 
logger "$0 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

Both scripts are pretty much self-documenting and quickly developed or modified anyone. Both scripts are pretty much self-documenting and quickly developed or modified anyone. The script /etc/NetworkManager/dispatcher.d/ifup-local run each time an interface named wlp4s0 up. The script-based config remains persistent across reboots and when network manager/service restarts. Here is a sample log from /var/log/messages displayed using tail command or grep command/egrep command generated by logger command:
# tail -f /var/log/messages
# egrep -i 'Setting up|ifup-local' /var/log/messages

CentOS 7 Run Script When Network Interface is Up with nm
Click to enlarge image

A note about creating /sbin/ifdown-local when network interface goes down

When a network interface goes down /sbin/ifdown-local runs. Here is a sample script:

#!/bin/bash
# Purpose: Remove additional ip or routing under GPL v.3.x+
# Author: Vivek Gite {https://www.cyberciti.biz/}
# -----------------------------------------------------------------------------
# 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

CentOS 7 disable Network Manager (nm) and run ifup-local script

To disable nm set NM_CONTROLLED to no in /etc/sysconfig/network-scripts/ifcfg-wlp4s0:
# vi /etc/sysconfig/network-scripts/ifcfg-wlp4s0
Append the following
NM_CONTROLLED=no
Save and close the file. If set to ‘no’, NetworkManager will ignore this connection/device and thus it will run /sbin/ifup-local. By defaults NM_CONTROLLED set to ‘yes’. Here is a sample /sbin/ifup-local:

#!/bin/sh
# Tested on a CentOS and RHEL version 5/6/7
# Author: Author: Vivek Gite {https://www.cyberciti.biz/}
# -------------------------------------------------------
#!/bin/sh
IN="$1"
STATUS="$2"
case "$1" in eth0) logger "$0: Working on eth0 with $STATUS ..." /sbin/ethtool -K eth0 gso off ;; eth1) logger "$0: Working on eth1 with $STATUS ..." /sbin/ethtool -G eth1 rx 4096 tx 4096 /sbin/ethtool -K eth1 gso off ;; eth2) logger "$0: 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

Create /sbin/ifdown-local if you want to run a script when a network interface goes down as described above.

Conclusion

You learned how to run commands persistently on boot or whenever network interface goes up or down. Take a look at syconfig.txt for more info.

Posted by: Vivek Gite

The author is the creator of nixCraft and a seasoned sysadmin, DevOps engineer, and a trainer for the Linux operating system/Unix shell scripting. Get the latest tutorials on SysAdmin, Linux/Unix and open source topics via RSS/XML feed or weekly email newsletter.

Facebook Comments

More Stuff

Slow performance issues of OpenBSD or FreeBSD KVM guest on Linux n... I run a couple of OpenBSD and FreeBSD guest/virtual machines under KVM. My server has 32GB ram and 4C/8T Intel Xeon CPU. Everything was working fine ...
How To Set Up A Load-Balanced MySQL Cluster With MySQL 5.1 This tutorial is based on Falko Timme's tutorial for MySQL Cluster 5.0. It shows how to configure a MySQL 5.1 cluster with five nodes: 1 x management,...
Linux Delete All Files In Directory Using Command Line nixCraft Up... I want to remove all files from a directory. Can you tell me Linux command to delete all files in a directory?Introduction: You can remove all files ...
3 new OpenStack guides If your job involves doing development or system administration in the cloud, you know how hard it can be to keep up with the quick pace of innovation...
Spread the love

Posted by News Monkey