我想弄清楚为什么nmbd
启动需要这么长时间并修复它。
那么我该如何加快 的启动时间呢nmbd
?这烦人的五秒钟看起来有点像某种超时。而且由于smbd
取决于nmbd
此减速会影响 Samba 服务器的启动。
无论我做什么,它总是需要几乎恰好五秒钟才能启动,但最重要的是默认情况下nmbd
和在到达之前的输出smbd
中。systemd-analyze critical-chain
multi-user.target
# systemd-analyze blame|grep -P '^\d'
5.963s fwupd.service
5.062s bolt.service
5.043s nmbd.service
1.088s dev-nvme0n1p2.device
1.045s upower.service
# systemctl status nmbd.service
● nmbd.service - Samba NMB Daemon
Loaded: loaded (/lib/systemd/system/nmbd.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2020-06-29 22:32:28 CEST; 6min ago
Docs: man:nmbd(8)
man:samba(7)
man:smb.conf(5)
Main PID: 1645 (nmbd)
Status: "nmbd: ready to serve connections..."
Tasks: 1 (limit: 76702)
Memory: 12.7M
CGroup: /system.slice/nmbd.service
└─1645 /usr/sbin/nmbd --foreground --no-process-group
Jun 29 22:32:23 sysname systemd[1]: Starting Samba NMB Daemon...
Jun 29 22:32:28 sysname systemd[1]: Started Samba NMB Daemon.
这是后我已覆盖nmbd.service
和smbd.service
单位如下:
[Unit]
After=multi-user.target
[Install]
WantedBy=
... 结果是这样的(systemd-analyze plot
输出):
... 与此相反(systemd-analyze plot
输出)前:
两次启动都耗时十二秒多一点。
答案1
我遇到了同样的问题,于是决定查看源代码。在日志../../lib/util/become_daemon.c:135(become_ready)
中,在出现来自的日志消息之前有 5 秒的间隔。通过在源代码因为become_ready
,我发现nmbd.c
源代码。现在,除了打电话,还有什么可能导致五秒钟的延迟sleep()
?果然,第 371 行有以下代码:
/* We only count IPv4, non-loopback interfaces here. */
while (iface_count_v4_nl() == 0) {
sleep(5);
load_interfaces();
}
iface_count_v4_nl
返回 IP 为不是环回和是IPv4。这表明调度 nmbd.service 启动后 network-online.target
应该管用。