系統時間更新後啟動裝置

系統時間更新後啟動裝置

我有一台運行 Arch Linux 的 ODROID-C2 機器。當我運行時journalctl -b,我可以看到最初時間是錯誤的:

-- Logs begin at Thu 2020-02-13 20:01:10 GMT, end at Fri 2020-03-20 17:20:14 GMT. --
Feb 13 20:01:15 moby kernel: Initializing cgroup subsys cpuset
Feb 13 20:01:15 moby kernel: Initializing cgroup subsys cpu
Feb 13 20:01:15 moby kernel: Initializing cgroup subsys cpuacct
Feb 13 20:01:15 moby kernel: Linux version 3.16.81-1-ARCH (builduser@

隨後,在啟動過程中,時間會更新:

Feb 13 20:01:26 moby dbus-daemon[246]: [system] Activating via systemd: service name='org.freedesktop.hostname1' unit='dbus-org.freedesktop.hostname1.service' requested by ':1.0' (uid=981 pid=203 comm="/usr/lib/systemd/systemd-networkd ")
Feb 13 20:01:26 moby systemd[1]: Starting Hostname Service...
Mar 20 17:12:59 moby systemd-timesyncd[234]: Initial synchronization to time server 85.199.214.99:123 (0.arch.pool.ntp.org).
Mar 20 17:13:02 moby kernel: audit_printk_skb: 36 callbacks suppressed

1.問題:我希望時間從一開始就(接近)正確。有沒有辦法用 ODROID-C2 做到這一點?據我了解,此功能需要電池才能運作,但我認為 ODROID-C2 沒有電池。 更新:顯然,這並不是一件容易就能做到的事。

最重要的是,我想確保服務僅在時間校正後才啟動,因為它可能會混淆計時器等。

  1. 跑步:systemctl enable systemd-time-wait-sync.service
  2. 將:放入After=time-sync.target服務文件中。

2.問題:那是對的嗎?

我很困惑,因為我不認為這就是正在發生的事情。我有以下服務文件:

[Unit]
Description=Run check-updates.service every Friday at 8pm
After=time-sync.target

[Timer]
OnCalendar=Fri 20:00
Persistent=true

[Install]
WantedBy=timers.target

但我可以閱讀以下內容journalctl -b

Feb 13 20:01:25 moby systemd[262]: check-updates.timer: Not using persistent file timestamp Fri 2020-03-20 17:01:56 GMT as it is in the future.
Feb 13 20:01:25 moby systemd[262]: Started Run check-updates.service every Friday at 8pm.

顯然是在時間更新為正確時間之前。

3.問題:我怎樣才能進一步調試這個?

答案1

如果沒有 BIOS 時鐘,這可能無法完成。我不熟悉 ODROID-C2,但曾在其他一些嵌入式設備上工作過。

由於系統將在核心啟動後立即開始記錄,journalctl 輸出將包含從系統硬體時鐘取得的任何內容的日期戳,直到它可以正確時間為止。由於您的裝置沒有電池,因此無法保留日期。在網路恢復並從 NTP 伺服器獲取時間之前,您的系統將會遇到困難。

可能還有另一種方法,但我懷疑 BIOS 在硬體初始化時不提供時間。

相關內容