我有一个树莓派,每次重新启动我都会在最后看到这个输出:
root@RaspberryPi:~# last | grep boot
reboot system boot 4.4.0-1055-raspi Thu Jan 1 01:00 still running
reboot system boot 4.4.0-1055-raspi Thu Jan 1 01:00 still running
reboot system boot 4.4.0-1055-raspi Thu Jan 1 01:00 - 23:01 (17305+22:01)
reboot system boot 4.4.0-1055-raspi Thu Jan 1 01:00 - 23:01 (17305+22:01)
reboot system boot 4.4.0-1055-raspi Thu Jan 1 01:00 - 23:01 (17305+22:01)
尽管安装了 fake-hwclock 和硬件 RTC,但情况仍然如此。
目前,fake-hwclock.service 的服务在 sysinit.target 之前启动,如下所示:
[Unit]
Before=sysinit.target
[Service]
ExecStart=/sbin/fake-hwclock load
[Install]
WantedBy=sysinit.target
如何让它在 /var/log/wtmp 更新之前运行?
答案1
我认为这是 systemd-update-utmp 中的一个错误。请参阅此处的评论:https://github.com/systemd/systemd/issues/6057#issuecomment-435247567
解决方法是在 initramfs 中运行 fake-hwclock,然后再将控制权传递给主 systemd 实例。
答案2
wtmp“重新启动”登录记录由 systemd-update-utmp systemd 服务处理。它必须在 sysinit 目标之前启动,这意味着在启动完成之前,如果该服务尚未启动,则该服务将启动。这并不意味着 systemd-timesyncd 一定会在 systemd-update-utmp 之前启动。
我在我的 arch Linux 服务器上进行了测试,并且 systemd-timesyncd 始终在 systemd-update-utmp 之前运行良好。另一方面,它们几乎总是彼此相距一个 pid。
但由于它没有在 NTP 之后明确运行,我认为这仍然应该被视为一个错误。
从系统手册:
“=之后是逆Before=,即After=确保配置的单元在列出的单元启动完成后启动”
https://www.freedesktop.org/software/systemd/man/systemd.unit.html
你应该做什么:
systemctl edit systemd-update-utmp
[Unit]
After=systemd-timesyncd.service
Wants=systemd-timesyncd.service