
私の時計の時間を実際の同期された現在の時間にできるだけ近づけたいと思います。
時計を正しく設定できるように、現在の時刻(秒単位まで正確)を繰り返し表示し、NTPを使用して校正できるコマンドはありますか?
答え1
システムがntpと同期している場合(ntpq -crv
状態で「sync_ntp」および/または/usr/sbin/ntptime
コード「0(正常)」とPLLまたはFLLをチェックしますが、状態はUNSYNCではありません)、date
友達はすべて正しい時間を返します。おそらくオフになっているでしょう。バイアス「移動」値(通常は数ミリ秒で時計を設定するよりもはるかに優れています)
自分で設定できるスクリプトがある前に、次のPerlスクリプトを使用して時計を設定しました。
#!/usr/bin/perl
use strict;
use utf8;
use Time::HiRes qw(gettimeofday usleep);
binmode STDOUT, ':utf8';
# Set up start conditions
my ($timer, $residual) = gettimeofday;
usleep(1e6 - $residual);
$residual = 0;
++$timer;
my $correction = 0;
while (1) {
usleep(1e6 + $residual + $correction);
++$timer;
my ($m_s, $m_µs) = gettimeofday;
$correction = (1e6*($timer - $m_s) - $m_µs);
$residual += $correction;
if ($correction < 5_000 && $correction > -5_000) {
# if within 5ms
print "\a ".localtime($timer)."\t${correction} µs\n";
} else {
print "x ".localtime($timer)."\t${correction} µs\n";
}
}
端末で実行してください。毎秒時間を表示しようとして5ミリ秒以内に到着すると、ターミナルビープ音が鳴ります。もちろん、率直に言って、ビープ音の遅延はおそらく5ミリ秒以上です。これは、脳がビープ音を認識して反応するのにかかる時間です。
(信号音が聞こえるときにキーを押すようにして、コンピュータが最初に反応時間をテストし、それを使用してより早くビープ音を鳴らして反応時間を相殺する機能を追加できます。)
答え2
ntpdはNTPサーバーのグローバルインフラストラクチャに追いつく必要があり、インターネットを介して移動し、レイヤを介して時間を伝播するUDPパケットの損失/ RTTを補償/計算/考慮するアルゴリズムを持っています。レイヤ 1 NTP サーバは通常、アトミッククロックに接続されます。日付は解決策 1 で十分です。