Linux启动很慢,查询各服务的启动耗时,可以使用如下命令:
systemd-analyze blame
发现耗时最长的是NetworkManager-wait-online.service,通常此服务是等待所有网络接口都获取到IP,或者120秒超时。
可以编辑/usr/lib/systemd/system/systemd-networkd-wait-online.service,修改为只要一个网络接口OK,就进行下一步:
ExecStart=/usr/lib/systemd/systemd-networkd-wait-online --any
或者改为缩短超时时长:
ExecStart=/usr/lib/systemd/systemd-networkd-wait-online --any --timeout=50
特别注意:
桌面系统通常使用NetworkManager-wait-online服务进行管理,它并不支持--any参数,而服务系统使用systemd-networkd-wait-online,才支持--any参数,所以需要切换管理网络的服务:
sudo systemctl disable NetworkManager-wait-online.service
sudo systemctl enable systemd-networkd-wait-online.service
另外,--any参数要生效,还需要将网络接口纳入管理,查看网络接口的管理状态,可通过命令 networkctl list 查询。
需要纳入管理的接口,需参加配置文件,如创建 /etc/systemd/network/20-enP4p65s0.network,其内容为:
[Match]
Name=enP4p65s0
[Network]
DHCP=ipv4
使用如下命令使生效:
sudo systemctl restart systemd-networkd