我想将手表上的时间设置为尽可能接近实际的同步当前时间。
是否有一个命令可以重复显示当前时间(精确到秒),并使用 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 来说绰绰有余。