가능한 가장 정확한 시간을 표시하세요.

가능한 가장 정확한 시간을 표시하세요.

내 시계의 시간을 실제 동기화된 현재 시간에 최대한 가깝게 설정하고 싶습니다.

시계를 올바르게 설정할 수 있도록 현재 시간(초 단위까지 정확함)을 반복적으로 표시하고 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에 충분합니다.

관련 정보