为什么Ubuntu的时钟变慢或变快?


16

Ubuntu的时钟关闭了大约半小时:

Ubuntu时间和日期v。美国官方时间

我什至从哪里开始排除故障?

据称它是“从互联网自动”设置的。如何验证“互联网”知道现在几点了?

细节

Ubuntu有很多时间可以与Internet通信:

$ date; uptime
Fri May 18 05:56:00 PDT 2012
 05:56:00 up 12 days, 10:48,  2 users,  load average: 0.61, 0.96, 1.15

我通过网络搜索找到的这个时间服务器确实知道正确的时间:

$ date; ntpdate -q north-america.pool.ntp.org
Fri May 18 05:56:09 PDT 2012
server 208.38.65.37, stratum 2, offset 1752.625337, delay 0.10558
server 46.166.138.172, stratum 2, offset 1752.648597, delay 0.10629
server 205.189.158.228, stratum 3, offset 1752.672466, delay 0.11829
18 May 05:56:18 ntpdate[29752]: step time server 208.38.65.37 offset 1752.625337 sec

没有报告与NTP相关的错误:

$ grep -ic ntp /var/log/syslog
0

重新启动后,时间已自动更正,并且出现在/var/log/syslog

May 18 17:58:12 aux ntpdate[1891]: step time server 91.189.94.4 offset 1838.497277 sec

ntpdate报告的偏移量日志显示,时钟每小时每小时漂移约9秒:

$ while true; do ntpdate-debian -q | tail -n 1 >> 'drift.log'; sleep 16m; done
^C
$ r -e '
    attach(read.table("drift.log", header=FALSE))
    clock <- as.POSIXct(paste(V1, V2, V3), format="%d %b %H:%M:%S")
    fit <- lm(V10~clock)
    png("drift.png")
    plot(clock, V10, xlab="Clock time", ylab="Time server offset (s)")
    abline(fit)
    mtext(sprintf("Drift rate: %.2f s/hr", fit$coefficients[[2]]*3600))
'

时钟时间v。时间服务器偏移


背景:ntp维护准确时间的好工具。但是,从不正确的时间到达当前时间需要花费有限的时间(数分钟,甚至数小时)。这与ntp服务器(您的选择)以及您对这些服务器的Internet延迟有关。@Floyd概述了快速强制正确时间的快捷方式。但是更好的时间(和使用ntp)需要仔细选择ntp服务器。
david6 2012年

我的车这样做了……让我发疯了……我必须每周减少20分钟的时间……
TheXed 2012年

我想尝试做的是改变主板上的电池的第一件事....
TheXed

Answers:


17

ntp可以很好地保持您的计算机设置在正确的时间,并且无需将计算机反向运行就可以做到这一点-这对于您可能正在运行的某些程序来说是一件坏事。

它不仅可以设置时间,还可以不断调整计算机的时间保持方式,以使它的时间不仅在一个瞬间正确,而且可以保持接近实时(在几十毫秒内,而不是几十分钟内)。 。它同时调整相位(时间)和速率(时钟“滴答声”的速度)。ntp永远不会使时钟倒退。建立重新启动后的时钟计时速度可能需要很长时间,因此ntp会在名为/var/lib/ntp/ntp.drift的文件中跟踪漂移。由于您没有运行ntp,因此不会发生任何情况。

ntp不再像以前那样流行,因为休眠的笔记本电脑和台式机以及虚拟机有时会使其无法运行。它被设计为在不间断运行的计算机上按自己的时间表每隔一段时间运行一次,并且在时间连续的现实世界中也是如此。这可能就是为什么现代工作站默认未安装它的原因。[对于Vmware,请参阅此]

而是在启动网络接口时运行ntpdate。当睡眠中的笔记本电脑被唤醒时,它将重新建立网络连接,运行ntpdate,并且时间再次正确。如果机器的硬件时钟非常准确,并且网络连接频繁,那么对于大多数人来说通常就足够了。

由于某种原因,股票ntpdate不会一直运行。在这种情况下,请改用ntpdate-debian。for.mer的语法类似于ntpdate ntp.ubuntu.com,后者是ntpdate-debian

如果没有这些事情之一,那么ntp是节省时间的更好方法。

系统被设计为每隔一个频繁地中断计时器中断,并在每次中断时更新其时间观念。只要硬件计时器运行到规范。时间不会漂移太多。如果没有硬件计时器,则时间会漂移得更多(出于相同的原因,您的手表或电池控制的时钟也会使所有这些时钟都漂移一些。插入墙壁的时钟将通过保持的频率和相位与时间同步。您的电力公司)。

大多数计算机计时器由其集成电路上的晶体控制振荡器电路控制。尽管有晶体,但它们的运行速度取决于环境(主要是温度)的变化。除非您安装了一些我们不知道的时间同步软件,否则我会说您的系统时钟不符合规格。

如果您要运行一两天的ntp,它将在/var/lib/ntp/ntp.drift中存储信息,该信息将指示您必须调整多少操作系统时间才能使每个中断的时间增加使您的硬件时钟速率与其通过互联网获得的实时时间相匹配。保持文件不变,然后在一分钟后启动和停止ntp(假设您保持/var/lib/ntp/ntp.drift文件不变),如果在此之后保留了时钟偏差ntp设置,可能会对此做出很多纠正ntp结束。我不确定这个细节。

我怀疑ntp将存储在/var/lib/ntp/ntp.drift中的值与我的有很大不同。

但是,如果此计算机始终保持运行,则最好的方法是安装ntp并使其起作用。有关在开始之前正确安排时间的详细信息,请参见其他答案。我在台式机上运行ntp,在笔记本电脑上运行ntpdate

nealmcb 在答案中提到了一种有趣的可能替代方法adjtimex 。

如果您的系统没有一直保持运行状态,那么在引导时运行ntpdate似乎是一个不错的选择。

警告如果计算机时间倒退,某些软件可能会出现故障。引导运行ntpdate 可能会导致这种情况发生。

一个陷阱,可能是个问题:正如我记得ntp所预计的,时间不会太远。如果是这样,则尝试采取保守措施,ntp根本不会调整时间。如果您处于这种情况,则两者都有意义- 在引导时运行ntpdate可以将时间初始化为正确的时间,然后让ntp运行以使其保持运行状态以提供准确的计时。尤其是坏的主板电池会导致此错误,启动已关闭很长时间的计算机也可能导致此错误。


约翰很好的解释!一件小事-大多数主板上的日期/时间都由单独的RTC(实时时钟)维护,该时钟使用自己的32.768 KHz晶体(因为将该频率除以2 ^ 15可以精确到一秒钟),而FSB通常为100+ MHz的时钟与日期保持时间无关-如果这样的话,超频/降频会弄乱它-而是通常是RTC模块/电路中的晶体漂移。您可以查找此问题并回复评论和/或编辑您的答案以反映这一点吗?
ish 2012年

我都做!正如我所说,我已经不再提到超频了,因为我认为这不太可能。但是,RTC仅用于设置启动时间。如您的评论所述,它仅精确到1秒。该man rtc页面说:“ RTC不应与系统时钟混淆,系统时钟是内核维护并用于实现gettimeofday(2)的软件时钟...”不知道系统时钟是否与FSB时钟相关。查看内核配置,最新的Ubuntu精确i386内核的系统时钟更新为250Hz。感谢您的评论!
John S Gruber 2012年

@izx在我的笔记本电脑系统上,内核使用HPET作为其时钟源。它是可配置的。维基百科说,这是南桥功能的一部分。我不知道这与FSB有什么关系,但我认为FSB是北桥的一部分。
John S Gruber 2012年

谢谢约翰和@izx。我对它的全面性感到高兴。izx,希望您不要将我个人标记为已接受。我认为这对将来的访问者来说会更好。
ændrük

@ændrük:完全没有问题,因为您可以看到我也非常欣赏John的周全。
ish 2012年

12

-通常每次启动或从睡眠唤醒时,时间仅同步一次

因此,问题似乎出在Ubuntu的默认时间服务器(它是什么?)的时间不正确,或者Ubuntu没有自动从Internet设置时间。

不,Ubuntu的时间服务器是正确的,它正在从中自动设置时间。

问题在于,通常在每次启动时(或者更确切地说,每次启动网络接口时,无论是关机,睡眠还是休眠)发生一次。根据您的正常运行时间,可以肯定地说,一周以上没有同步。由于某种原因,您的系统时钟运行得很快。

- cron如果您不经常重新启动,或者您的服务器/台式机永远不会进入睡眠状态,请设置一个每小时进行同步的工作

最好的选择是建立一个Cron职位,如果您想要超精确的时间,我会每小时说一次。最简单的方法是:

  • sudo editor /etc/cron.hourly/ntpsync

添加以下行:

#!/ bin / bash

ntpdate ntp.ubuntu.com#或您选择的服务器
  • 保存,退出并 sudo chmod +x /etc/cron.hourly/ntpsync

/etc/cron.daily如果需要,您可以每天放入一次。


发现。我接受此答案是为了正确回答我的时钟为何出错的问题,但我对此解决方案表示怀疑。在决定要采取什么措施之前,我将不得不多了解一点。
ændrük

如果您在ntp.conf文件中设置了您选择的服务器,是否需要在此处重新定义它?
Snekse 2012年

6

如果您已经安装了ntp time守护程序,并且计算机上的时间距离太远而无法快速纠正,则可能会发生这种情况。

要修复它,请打开终端并执行

  sudo service ntp stop
  sudo ntpdate swisstime.ethz.ch
  date
  sudo service ntp start

这是做什么的:

  1. 停止ntp守护程序
  2. 设定时钟
  3. 现在该是时候了
  4. 重新启动ntp守护程序

如果您没有安装ntp,请执行以下操作

  sudo apt-get install update

更新:如此处建议的那样,在cron作业中使用ntpdate会导致细微的问题。

ntpdate将使时间大约每小时跳一次。使用ntp可以避免此问题,因为它会通过倾斜时钟来调整时间。同样,虽然在附近选择ntp服务器可以提供更高的准确性,但这不是必需的。默认的ntp配置文件中包含多个服务器,该服务器会自动补偿任何延迟。

底线:-使用ntp-如果距离很远,请关闭ntp,运行一次ntpdate,然后重新启动ntp。


/etc/init.d/ntp不存在。这是最近安装的Ubuntu 12.04,我没有刻意更改与时间有关的任何内容。
ændrük

然后,我建议安装它。
弗洛伊德

我尽可能不介入系统范围的配置和服务。如果默认情况下未安装此文件,为什么必须要使用默认的时间和日期设置?
ændrük

1
重新启动后时间是否正确?我怀疑时钟更新仅运行一次ntpdate。某些系统存在Linux维护的系统时钟运行得太快的问题。我曾在以虚拟机运行的系统中遇到过这种情况。
弗洛伊德2012年

1
如果重新启动或关闭后此问题仍然存在,则可能是您的CMOS电池在MOBO中失效了。
阿特兹2012年

1

我有一个类似的问题,这是由防火墙中的某些东西引起的。最后,我添加了每小时的cron作业,但添加了-u参数以ntpdate使其使用非标准端口。

我的问题是由于Ubuntu并未实际检查是否ntpdate有效,而是自动假定它将正常工作。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.