我的系统 Ubuntu 16.04 使用NetworkManager
。为了挂接接口启动事件,我在 中放置了一个脚本/etc/network/if-up.d/
。脚本的头部如下所示:
#!/bin/bash
NETIF="enp2s0"
if [ "$IFACE" != $NETIF ]; then
exit 0
fi
/some/cmd/output &>> /var/log/if-up.log
iptables -F -t nat
...
系统启动时以及通过小程序手动重启网络时,脚本都会运行两次。这不会有什么问题,但我运行了一些命令,这需要一些时间。
我能做些什么来避免这种情况?
答案1
该脚本可能针对 IPv4 调用一次,针对 IPv6 调用一次。
根据在我的计算机上运行的一个小脚本,这些是您在环境中拥有的变量,如下所示。我应该提到这是在 amd64 上使用网络管理器版本 1.2.6 的情况。
您可以使用$ADDRFAM
它来测试哪个调用是哪个。其他变量也很有用:
ADDRFAM=inet6 # "inet" if ipv4
CONNECTION_FILENAME=/etc/NetworkManager/system-connections/WIFI_CONN
CONNECTION_UUID=b9464eff-3c0c-4035-1f65-9ac8ccda824f
DEVICE_IFACE=wlo1
DEVICE_IP_IFACE=wlo1
DHCP4_BROADCAST_ADDRESS=192.168.1.255
DHCP4_DHCP_MESSAGE_TYPE=5
DHCP4_DHCP_SERVER_IDENTIFIER=192.168.1.1
DHCP4_EXPIRY=1503257834
DHCP4_NETWORK_NUMBER=192.168.1.0
DHCP4_NEXT_SERVER=0.0.0.0
DHCP4_NTP_SERVERS=omitted
DHCP4_REQUESTED_DOMAIN_NAME=1
DHCP4_REQUESTED_DOMAIN_NAME_SERVERS=1
DHCP4_REQUESTED_HOST_NAME=1
DHCP4_REQUESTED_MS_CLASSLESS_STATIC_ROUTES=1
DHCP4_REQUESTED_NETBIOS_SCOPE=1
DHCP4_REQUESTED_RFC3442_CLASSLESS_STATIC_ROUTES=1
DHCP4_REQUESTED_ROUTERS=1
DHCP4_REQUESTED_STATIC_ROUTES=1
DHCP4_REQUESTED_SUBNET_MASK=1
DHCP4_REQUESTED_WPAD=1
DHCP4_TIME_OFFSET=3600
IP4_ADDRESS_0=192.168.1.37/24 192.168.1.1
IP4_NAMESERVERS=208.67.222.222
IP4_NUM_ADDRESSES=1
IP6_GATEWAY=::
IP6_NUM_ADDRESSES=1
MODE=start
PHASE=post-up
VERBOSITY=0