できるだけ正確な時間を表示してください。

できるだけ正確な時間を表示してください。

私の時計の時間を実際の同期された現在の時間にできるだけ近づけたいと思います。

時計を正しく設定できるように、現在の時刻(秒単位まで正確)を繰り返し表示し、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ミリ秒以上です。これは、脳がビープ音を認識して反応するのにかかる時間です。

(信号音が聞こえるときにキーを押すようにして、コンピュータが最初に反応時間をテストし、それを使用してより早くビープ音を鳴らして反応時間を相殺する機能を追加できます。)

おすすめ記事