我有 eth0 设备和 tun0 设备(VPN),我想自动检测这些设备中的任何一个是否改变状态,即它们是启动还是关闭。
在每种情况下,我都希望自动调用预定义的脚本。因此:
- 如果 eth0 出现故障,我想调用脚本 1
- 如果 tun0 发生故障,则执行脚本 2
- 如果 tun0 启动,则执行脚本 3
如何使用 NetworkManager 来实现这一点?
对于 tun0,我可以使用/etc/network/interfaces
:
auto tun0
iface tun0 inet manual
up /bin/sh /home/matej/tun-up.sh
down /bin/sh /home/matej/tun-down.sh
由于网络是由网络管理器管理的,那么 eth0 怎么样?
答案1
非常感谢!我做的是:
sudo nano /etc/NetworkManager/dispatcher.d/02-events
内容如下:
#!/bin/sh -e
if [ "$1" = "eth0" ] && [ "$2" = "down" ] ; then
echo "eth0 is down!" >> /home/matej/dispatch.txt
fi
if [ "$1" = "tun0" ] && [ "$2" = "down" ] ; then
echo "VPN is down!" >> /home/matej/dispatch.txt
fi
if [ "$1" = "tun0" ] && [ "$2" = "up" ] ; then
echo "VPN is up!" >> /home/matej/dispatch.txt
fi
使其可执行:
sudo chmod +x /etc/NetworkManager/dispatcher.d/02-events
重启网管:
sudo service network-manager restart
这按预期工作,但是当我拔掉以太网电缆时,大约有 10 秒的超时时间,然后 NetworkManager 才会检测到事件。可以将其缩短到 5 秒吗?