我有一台运行 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 没有电池。 更新:显然,这并不是一件容易就能做到的事情。
最重要的是,我想确保只有在更正时间后才启动服务,因为它可能会混淆计时器等。我读到可以执行以下操作来实现这一目标:
- 跑步:
systemctl enable systemd-time-wait-sync.service
- 将:放入
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 在硬件初始化时不提供时间。