Моя система, 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
...
При загрузке системы, а также при ручном перезапуске сети через апплет сценарий запускается дважды. Это не было бы такой проблемой, но я выполняю несколько команд, что требует времени.
Что я могу сделать, чтобы этого избежать?
Сценарий, вероятно, вызывается один раз для IPv4 и один раз для IPv6.
На основе при запуске небольшого скрипта на моем компьютере, это переменные, которые у вас есть в среде ниже. Я должен упомянуть, что это было с сетевым менеджером версии 1.2.6 на amd64.
Вы можете использовать $ 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