我有一个 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/interfaces
https://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。