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

Ubuntu的时钟大约需要半小时:

Ubuntu Time&Date v。美国官方时间

我在哪里开始对此进行故障排除?

据称它是“自动从互联网”设置的。 如何validation“互联网”知道它的时间是什么时候?

细节

Ubuntu有足够的时间与互联网沟通:

$ 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永远不会使时钟倒退。 重新启动后确定刻录时钟的速度可能需要很长时间,因此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运行以使其保持运行以提供准确的计时。 特别是坏的主板电池可能会导致此错误,因为可以启动长时间关闭的计算机。

– 通常每次启动或从睡眠中唤醒时只会同步一次

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

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

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

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

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

  • sudo editor /etc/cron.hourly/ntpsync

添加以下行:

 #!/斌/庆典

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

如果您愿意,可以将其放在/etc/cron.daily ,每天一次。

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

要解决它打开终端并做

  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。

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

我的问题是由Ubuntu实际上没有检查ntpdate有效但是自动假设它可以工作。