NTPデーモンのステータスをntpdc -c sysinfo
で照会すると、次の出力が得られます。
system peer: 0.0.0.0
system peer mode: unspec
leap indicator: 11
stratum: 16
precision: -20
root distance: 0.00000 s
root dispersion: 12.77106 s
reference ID: [73.78.73.84]
reference time: 00000000.00000000 Thu, Feb 7 2036 7:28:16.000
system flags: auth monitor ntp kernel stats
jitter: 0.000000 s
stability: 0.000 ppm
broadcastdelay: 0.000000 s
authdelay: 0.000000 s
これは、NTP同期が失敗したことを示しています。ただし、システム時刻は1秒以内の精度です。ネットワーク接続なしでシステムを実行したときと同じ期間、システム時刻を変更すると、システム時刻がずれます。 10秒。
この動作は、システムが時刻を同期する別の方法を持っていることを示唆しています。 systemd-timesyncd.service
(/etc/systemd/timesyncd.conf
の構成ファイルを使用)もあることに気付き、timedatectl status
は正しい時間を提供します。
Local time: Thu 2016-08-25 10:55:23 CEST
Universal time: Thu 2016-08-25 08:55:23 UTC
RTC time: Thu 2016-08-25 08:55:22
Time zone: Europe/Berlin (CEST, +0200)
NTP enabled: yes
NTP synchronized: yes
RTC in local TZ: no
DST active: yes
Last DST change: DST began at
Sun 2016-03-27 01:59:59 CET
Sun 2016-03-27 03:00:00 CEST
Next DST change: DST ends (the clock jumps one hour backwards) at
Sun 2016-10-30 02:59:59 CEST
Sun 2016-10-30 02:00:00 CET
だから私の質問は2つのメカニズムの違いは何ですか?それらの1つは非推奨ですか?並行して使用できますか? NTP同期ステータスを照会する場合、どれを信頼すればよいですか?
(私は別のシステム(別のネットワークで)を使用しており、どちらの方法も成功を示し、正しい時間を生み出していることに注意してください。)
systemd-timesyncdは基本的に小さなクライアントのみのNTP新しいsystemdリリースにバンドルされた実装です。完全なntpdよりも軽量ですが、時間同期のみをサポートします。つまり、 NTP他のマシンのサーバー。クライアントのntpdを置き換えることを目的としています。
理論的には、わずかな遅延がある異なるタイムサーバーを選択する可能性があるため、両方を並行して使用しないでください。これにより、システムクロックが定期的に「ジャンプ」します。
ステータスを取得するには、残念ながらntpdを使用している場合はntpdc
を使用し、timesyncdを使用している場合はtimedatectl
を使用する必要があります。両方を読み取ることができるユーティリティはありません。
systemd-timesyncdはクロックの調整を行いません。クロックはトレーニングまたは補正されておらず、内部クロックの経時的なドリフトは減少しません。ポーリング間隔を調整するための基本的なロジックがありますが、systemd-timesyncdが短期ドリフトが必要と考える任意の間隔でプッシュまたはプルするため、ホストを統制しないと、最終的に不均一な時間になります。また、リモートタイムソースの品質を評価することもできません。 100msよりはるかに高い精度が得られる可能性はほとんどありません。これは、ラップトップなどの単純なエンドユーザーデバイスには十分ですが、より高い時間精度を必要とする分散システムで問題を引き起こす可能性があります。