当我想要启动我的笔记本电脑时,它会显示以下错误:
[FAILED] Failed to start Dispatcher daemon for systemd-networkd
[接下来发生的事情]
请帮我。
答案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.service
和systemd-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 秒。