Ubuntu 16.04 systemd 服务在使用 etc/network/interfaces 时等待 dhclient 完成

Ubuntu 16.04 systemd 服务在使用 etc/network/interfaces 时等待 dhclient 完成

我有一个 16.04 台式机,它通过 WiFi 连接到互联网。为了便于远程管理,通过而不是网络管理器wlan0进行配置。/etc/network/interfaces

我有一个systemd服务已启用为开机启动。此服务设置为在default.target以下情况下启动:

[Unit]
After=default.target

[Service]
Type=simple
ExecStart=/usr/bin/node main.js"
Restart=always

[Install]
WantedBy=default.target

如果我在其 wifi 网络范围内启动该盒子,此服务将立即启动,因为 dhclient 会立即收到 IP。但是,如果我在无法连接 wifi 的地方启动系统,我的服务将处于闲置状态,等待 dhclient 放弃后再启动。此服务等待的时间恰好是本/etc/dhclient/dhclient.conf timeout 300节中指定的 300 秒。

我的理解After=default.target不是等待网络。After=network.target是执行此操作的工具。如果我使用网络管理器而不是配置我的 wifi /etc/network/interfaces,则无论网络是否可用,服务都会立即启动。

无论 的状态如何,我怎样才能让我的服务启动,dhclient同时仍然使用/etc/network/interfaces

答案1

答案似乎是使用我从中学到的神秘allow-hotplug语句/etc/network/interfaceshttps://askubuntu.com/a/868445/358498

allow-hotplug wlan0
iface wlan0 inet dhcp
...

systemd不再等待网络启动依赖于 的服务default.target。为什么allow-hotplug会有这样的差异对我来说有点不清楚,因为我的系统中没有真正的“热插拔”事件。一个资源说:

关于 allow-hotplug 实际功能的文件并不多。man 接口(顺便说一下,这是一个相当不错的手册页)暗示,除非设置了 allow-hotplug,否则 ifup 将拒绝启动接口;但如果无论如何都要通过 /etc/init.d/networking start 启动网络,那么为什么根据是否存在 allow-hotplug 会发生不同的情况呢?这一切都非常令人困惑,但请相信我,如果您使用的是 PCMCIA 或 Cardbus(或可能是 USB),则需要 allow-hotplug。

相关内容