我的问题与 USB 网络共享和网络接口有关。
当我运行时ifconfig -a
,通常我会看到 3 个接口 - 环回、WiFi 和以太网。我已经在 中为它们中的每一个定义了网关、网络掩码和广播/etc/networking/interfaces
。
有时,我将手机连接到机器进行 USB 网络共享,运行时ifconfig -a
我可以看到另外 1 个名为 的接口enp0s20u2
。仅当连接手机并启用 USB 网络共享时才会显示此界面。为了调出该界面,我在中添加了以下几行/etc/networking/interfaces
:
# For USB tethering
auto enp0s20u2
iface enp0s20u2 inet dhcp
address 192.168.42.56
gateway 192.168.42.1
netmask 255.255.255.0
broadcast 192.168.42.255
这样,当我连接手机时,会自动调出并配置该界面。
问题就是如果手机没有连接的话systemd服务是无法启动的。enp0s20u2
大多数时候该界面是未知的,因此systemctl
无法在启动时以及我手动运行时启动它systemctl restart networking
。
有没有办法确保此接口配置不会导致服务无法启动?
答案1
将指令替换auto
为allow-hotplug
可以优雅地解决这个问题。该接口将不再由ifup -a
(因此不是由服务)启动,但它将在插入时或在启动时检测systemd
networking
到时启动。udev
# For USB tethering
allow-hotplug enp0s20u2
iface enp0s20u2 inet dhcp
address 192.168.42.56
gateway 192.168.42.1
netmask 255.255.255.0
broadcast 192.168.42.255
从man 5 interfaces
:
以“allow-”开头的行用于标识应由各个子系统自动启动的接口。这可以使用诸如“ifup --allow=hotplug eth0 eth1”之类的命令来完成,该命令仅在“allow-hotplug”行中列出时才会显示 eth0 或 eth1。请注意,“allow-auto”和“auto”是同义词。 (标记为“allow-hotplug”的接口在 udev 检测到它们时启动。如果该接口已存在,则可以在引导期间启动,也可以在稍后的时间启动,例如插入 USB 网卡时。请注意,这不会与检测插入的网络电缆没有任何关系。)