我有一個樹莓派,每次重新啟動我都會在最後看到這個輸出:
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