为什么 Ubuntu 的时钟越来越慢或越来越快?

ænd*_*rük 16 ntp

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

Ubuntu 时间和日期与美国官方时间

我什至从哪里开始解决这个问题?

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

细节

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
Run Code Online (Sandbox Code Playgroud)

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

$ 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
Run Code Online (Sandbox Code Playgroud)

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

$ grep -ic ntp /var/log/syslog
0
Run Code Online (Sandbox Code Playgroud)

重启后,时间自动更正,出现以下内容/var/log/syslog

May 18 17:58:12 aux ntpdate[1891]: step time server 91.189.94.4 offset 1838.497277 sec
Run Code Online (Sandbox Code Playgroud)

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))
'
Run Code Online (Sandbox Code Playgroud)

时钟时间与时间服务器偏移量

Joh*_*ber 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 中,这些信息将指示它必须调整多少操作系统时间在每次中断时前进的速率,以便将您的硬件时钟频率与其通过 Internet 获取的实时时间相匹配。保持文件相同并在一分钟后启动和停止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运行以保持其运行以提供准确的计时。特别是主板电池损坏会导致此错误,就像启动已关闭很长时间的计算机一样。


ish*_*ish 12

- 通常在每次启动或从睡眠中唤醒时只同步一次时间

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

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

问题是它通常在每次启动发生一次(或者更准确地说,每次启动网络接口时- 无论是从关机、睡眠还是休眠状态)。根据您的正常运行时间,可以肯定地说它在一个多星期内没有同步。由于某种原因,您的系统时钟运行速度稍快。

-cron如果您不经常重启,或者您的服务器/桌面永远不会进入睡眠状态,请设置每小时同步一次

你最好的办法是设置一个定时任务,如果你想要超精确的时间,我会说每小时一次。最简单的方法是:

  • sudo editor /etc/cron.hourly/ntpsync

添加以下几行:

#!/bin/bash

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

/etc/cron.daily如果你愿意,你可以把它放进去,每天一次。


Flo*_*oyd 6

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

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

  sudo service ntp stop
  sudo ntpdate swisstime.ethz.ch
  date
  sudo service ntp start
Run Code Online (Sandbox Code Playgroud)

这是做什么的:

  1. 停止 ntp 守护进程
  2. 设置时钟
  3. 现在应该是时候了
  4. 重启ntp守护进程

如果您没有安装 ntp,请使用

  sudo apt-get install update
Run Code Online (Sandbox Code Playgroud)

更新:在 cron 作业中使用 ntpdate,正如这里推荐的那样,会导致微妙的问题。

ntpdate 将使时间“跳跃”每小时左右。使用 ntp 可以避免这个问题,因为它会通过倾斜时钟来调整时间。此外,虽然选择附近的 ntp 服务器会提供更高的准确度,但这不是必需的。默认的 ntp 配置文件中有多个服务器,服务器会自动补偿任何延迟。

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