如何在更新 /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

相關內容