如何在更新 /var/log/wtmp 之前运行 fake-hwclock?

如何在更新 /var/log/wtmp 之前运行 fake-hwclock?

我有一个树莓派,每次重新启动我都会在最后看到这个输出:

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

相关内容