启动过程在 systemd-networkd-wait-online 处挂起

启动过程在 systemd-networkd-wait-online 处挂起

当我想要启动我的笔记本电脑时,它会显示以下错误:

[FAILED] Failed to start Dispatcher daemon for systemd-networkd

[接下来发生的事情]

1

请帮我。

答案1

听起来好像您有 >1 个systemd.network(5)配置文件/etc/systemd/network(或 [Match] 部分使用通配符指定 >1 个接口),但未RequiredForOnline=false在该[Link]部分中使用指令进行任何设置。在这种情况下,systemd-networkd-wait-online.service将期望全部使受管接口systemd-networkd达到routable运行状态。

虽然设置该指令也会使其systemd-networkd-wait-online.service完全被忽略,这可能也不是您想要的。如果您不关心按照 排序network-online.target,那么您也可以禁用和/或屏蔽该单元。

如果您希望保留对依赖项进行排序的优势network-online.target,那么我发现最简单的解决方法就是使用开关--any。创建文件/etc/systemd/system/systemd-networkd-wait-online.service.d/override.conf或使用sudo systemctl edit systemd-networkd-wait-online.service(这也将创建相同的文件)并包含以下行...

[Service]
ExecStart=
ExecStart=/usr/lib/systemd/systemd-networkd-wait-online --any

后续操作sudo systemctl daemon-reload应该sudo systemctl restart systemd-networkd-wait-online.service会立即告诉您它是否有效。

或者,您可以将--interface=and/or--ignore=开关与 一起使用systemd-networkd-wait-online。这些开关可以代替或与--any上面显示的开关一起使用。如果使用交换机在确定机器是否已达到在线状态时,--any只会考虑传递给的--interface=或未明确忽略的接口。--ignore=

答案2

您的系统在启动过程中并未冻结,而是进入了等待状态,等待网络设备完全配置后再继续。最终的修复将来自对 中的配置文件/etc/systemd/network和 中显示的服务日志的检查journalctl -xe | grep networkd,重点关注 中的报告中networkctl status -a未列为“已配置”状态的任何链接。已知当 IPv6 不可用或配置错误时会发生这种情况,但也可能是出于其他各种原因。

您应该通过引导程序(GRUB、rEFInd 等)以恢复模式重新启动系统,然后从出现的菜单中选择 root 选项。从那里,您可以使用上述命令检查系统和/或通过创建一个新目录并在其中创建mkdir /etc/systemd/system/systemd-networkd.service.d一个名为 override.conf 的新文件(例如sudoedit /etc/systemd/system/systemd-networkd.service.d/override.conf)来启用服务的调试日志,内容如下:

[Service]
Environment=SYSTEMD_LOG_LEVEL=debug

/etc/systemd/network您可以使用命令在恢复模式下测试对文件的修改是否成功/usr/lib/systemd/systemd-networkd-wait-online && echo $?。如果您已解决问题,则输出将为 0。如果其他方法均失败,您可以使用以下命令完全禁用该服务sudo systemctl disable systemd-netword-wait-online.service


相关手册页:

答案3

Ubuntu 可以使用systemd-networkd(服务器上的默认设置)或NetworkManager(桌面上的默认设置)来管理网络。因此,有两个等待服务:NetworkManager-wait-online.servicesystemd-networkd-wait-online.service。如果您启用了错误的服务(或者像我的情况一样,同时启用了两个服务),则服务将超时。您可以使用以下命令检查已启用的内容:

~# systemctl is-enabled NetworkManager-wait-online.service systemd-networkd-wait-online.service
enabled
enabled

在此示例中,如您所见,我已启用两者。您可以通过询问 systemd 来进一步查看正在使用哪个服务:

# systemctl is-enabled NetworkManager.service systemd-networkd.service
enabled
enabled

如您所见,在我的系统上,两个网络服务都已启用。我正在运行一台台式机,因此 NetworkManager 很可能是正确的服务。我可以通过查看/etc/netplan/并查看是否networkmanager.yaml存在来验证这一点。进一步检查netplan配置文件可以验证 NetworkManager 是否知道我机器上的所有接口。因此我禁用了systemd-networkd

# systemctl disable systemd-networkd.service
Removed /etc/systemd/system/network-online.target.wants/systemd-networkd-wait-online.service.
Removed /etc/systemd/system/sockets.target.wants/systemd-networkd.socket.
Removed /etc/systemd/system/multi-user.target.wants/systemd-networkd.service.

请注意,这还禁用了等待服务以及一些相关的其他服务。因此,这比仅仅禁用等待服务要好得多。现在我的启动时间从两分钟多一点减少到不到 10 秒。

相关内容