在启动时,Ubuntu 16.10 上的 networking.service 速度非常慢(5 分钟)

在启动时,Ubuntu 16.10 上的 networking.service 速度非常慢(5 分钟)

据称systemd-analyze blamenetworking-service启动时需要超过 5 分钟:

systemd-analyze 责备

为什么会发生这种情况?我该如何解决?

答案1

编辑 /etc/network/interfaces 并将接口的“auto”更改为“allow-hotplug”

sudo nano /etc/network/interfaces

例如:以太网卡的自动接口auto eth0更改为allow-hotplug eth0

之后,对我来说,“systemd-analyze blame”->networking.service 从 5 分钟变为 41 秒

答案2

我想到了一个解决方案,尽管称之为变通方法可能更合适。

问题在于 networking.service 的默认超时时间为 5 分钟,无论出于何种原因,在启动继续之前必须达到完整的超时期限。因此,启动需要 5 分钟多一点的时间。

我想到的解决方案如下:

 sudo systemctl edit networking.service

添加以下行:

TimeoutStartSec=10sec

我仍然不知道根本原因,也不知道超时的具体原因,但出于显而易见的原因,将超时从 5 分钟减少到 10 秒使得启动运行得非常快。

这是我在 Ubuntu 论坛上的解决方案的链接: https://ubuntuforums.org/showthread.php?t=2342450&p=13569192#post13569192

希望有所帮助。

答案3

仅仅添加TimeoutStartSec=10sec对我来说不起作用——我必须做一个小小的改变。查看后/lib/systemd/system/networking.service我发现配置属性嵌套在[Service]

我编辑后/etc/systemd/system/networking.service.d/override.conf看起来如下:

[Service]
TimeoutStartSec=10sec

现在它起作用了

答案4

从我的发现来看,也许找到一个更好的根本原因是合适的。在我看来,似乎是 systemd-networkd.service 拖延了该过程,而且进一步说,是某个特定的网络接口拖延了 networkd。

因此我决定采用两种方法:

  1. 只需在更方便用户使用的时间后超时 systemd-networkd-wait-online.service。这可以通过编辑 /lib/systemd/system/systemd-networkd-wait-online 并在调用服务的 ExecStart 行中添加一个选项来实现。要更快地超时,请附加 --timeout=10,以将等待时间缩短至 10 秒。默认情况下为 120 秒。然而,在我看来这可能不是最好的方法,也许某些接口确实可用才是关键。

    ExecStart=/lib/systemd/systemd-networkd-wait-online --timeout=10
    
  2. 尝试忽略您认为可能是根本原因的接口。在我的情况下,这是一个我尚未正确配置的非关键无线链路。它是在 netplan yaml 文件中定义的,但我尚未设置 wpa_supplicant 以使其作为具有 IP 等的 AP 启动并运行。这是导致停顿的依赖关系。所以我将 --ignore=int_wlan0 附加到 ExecStart 行。果然,关键以太网接口很快就启动了,但 networkd 正在等待来自 WLAN 链路的更多内容。一旦忽略到位,启动就会直接跳过 2 分钟的延迟。

    ExecStart=/lib/systemd/systemd-networkd-wait-online --ignore=int_wlan0
    

这很有道理,因为“man systemd-networkd-wait-online.service”指出“它将等待它知道的所有链接,这些链接由 systemd-networkd.service(8) 管理,完全配置或失败”。networkd 认为什么是完全配置是一个悬而未决的问题。从我的设置来看,这似乎包括拥有 IP 地址,但这可能只是无线链接的一个特殊情况。我不知道。然而,这个修复使事情运行得更快,至少我知道唯一的依赖关系是无线链接。

相关内容