システム時間が更新された後にユニットを起動する

システム時間が更新された後にユニットを起動する

私は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 が時間を提供しなければ、それは疑わしいと思います。

関連情報