この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
よく訓練されたアップル信者、都元です。昨日のエントリーはこちらです。本日は軽めのネタにて。
Edisonは内部に時計を持っています。チュートリアルの通りにさっさとWiFi接続をしてしまえば、その時からネットワークを介した時刻同期が行われるためあまり意識せず、現在時刻を扱えます。
しかし、Edisonには内臓のバッテリーは無いため、リアルタイムクロック(RTC)は給電を止めると初期化されてしまいます。それでもまぁ、ネットワークに繋がり次第同期を行うため、問題に気づくことはなかなかありません。
実験
Edisonのファームウェア初期化を行い、時計の状況を見てみましょう。
# reboot ota
この初期化の直後、Edisonはネットワークに繋がってはいません。しかし、電源は継続してONの状態であるため、時刻は正確なものを表示しています。
# date
Thu Dec 18 05:31:48 UTC 2014
# hwclock
Thu Dec 18 05:31:50 2014 0.000000 seconds
ではこのままネットワークに繋がずに、(init 0コマンド等でOSをシャットダウンしてから)電源供給を止めてみましょう。念のため10秒くらい放置してから、再び給電、起動します。その上で時刻を確認すると…
# date
Thu Oct 9 09:23:18 UTC 2014
# hwclock
Sat Jan 1 00:02:26 2000 0.000000 seconds
おお、システムクロック(前者)はどうしてこうなった的な時刻になっています。ハードウェアクロック(後者)は、恐らく起動時に2000/01/01 0:00 (UTC)から刻み始めた時刻でしょう。
ここでネットワークに繋いでみます。
# systemctl -l status systemd-timesyncd
● systemd-timesyncd.service - Network Time Synchronization
Loaded: loaded (/lib/systemd/system/systemd-timesyncd.service; enabled)
Active: active (running) since Thu 2014-10-09 09:22:29 UTC; 2 months 8 days ago
Docs: man:systemd-timesyncd.service(8)
Main PID: 152 (systemd-timesyn)
Status: "Using Time Server 216.239.32.15:123 (time1.google.com)."
CGroup: /system.slice/systemd-timesyncd.service
└─152 /lib/systemd/systemd-timesyncd
Jan 01 00:00:13 edison systemd[1]: Starting Network Time Synchronization...
Jan 01 00:00:13 edison systemd-timesyncd[152]: System clock time unset or jumped backwards, restoring from recorded timestamp: Thu 2014-10-09 09:22:29 UTC
Oct 09 09:22:29 edison systemd[1]: Started Network Time Synchronization.
Oct 09 09:22:32 edison systemd-timesyncd[152]: Network configuration changed, trying to establish connection.
Oct 09 09:22:32 edison systemd-timesyncd[152]: Network configuration changed, trying to establish connection.
Oct 09 09:35:26 edison-miyamoto-x systemd-timesyncd[152]: Network configuration changed, trying to establish connection.
Oct 09 09:35:26 edison-miyamoto-x systemd-timesyncd[152]: Network configuration changed, trying to establish connection.
Oct 09 09:35:28 edison-miyamoto-x systemd-timesyncd[152]: Network configuration changed, trying to establish connection.
Oct 09 09:35:53 edison-miyamoto-x systemd-timesyncd[152]: Network configuration changed, trying to establish connection.
Oct 09 09:35:53 edison-miyamoto-x systemd-timesyncd[152]: Network configuration changed, trying to establish connection.
Oct 09 09:35:54 edison-miyamoto-x systemd-timesyncd[152]: Network configuration changed, trying to establish connection.
Oct 09 09:35:56 edison-miyamoto-x systemd-timesyncd[152]: Network configuration changed, trying to establish connection.
Oct 09 09:35:56 edison-miyamoto-x systemd-timesyncd[152]: Network configuration changed, trying to establish connection.
Oct 09 09:36:27 edison-miyamoto-x systemd-timesyncd[152]: Using NTP server 216.239.32.15:123 (time1.google.com).
Dec 18 05:37:06 edison-miyamoto-x systemd-timesyncd[152]: interval/delta/delay/jitter/drift 32s/+6033639.712s/0.040s/0.000s/+0ppm
# date
Thu Dec 18 05:37:48 UTC 2014
# hwclock
Thu Dec 18 05:37:50 2014 0.000000 seconds
というわけで、systemd-timesyncdというデーモンにより、即座に時刻同期が行われました。ntpdじゃないんですね。
ちなみにsystemd-timesyncdの設定ファイルは/etc/systemd/timesyncd.confで、同期先はGoogleのタイムサーバのようです。
# cat /etc/systemd/timesyncd.conf
# This file is part of systemd.
#
# systemd is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
#
# See timesyncd.conf(5) for details
[Time]
Servers=time1.google.com time2.google.com time3.google.com time4.google.com
まとめ
Edisonを運用する上で、恐らく時刻同期はおろそかにすることができません。対策として「電源を絶やさない」「電源断後の起動時にネットワーク接続する」「別途電源を搭載したRTCモジュールを装備し、時刻同期を行う」等の対応が必要となると思います。
明日のエントリーはこちらです。