Ubuntu 的时钟大约差了半个小时:
我该从哪里开始解决这个问题?
据称它是“自动从互联网”设置的。我如何验证“互联网”知道现在几点?
细节
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))
'
答案1
NTTP 协议可以很好地将您的计算机设置为正确的时间,并且不会使其向后运行 - 这对于您可能正在运行的某些程序来说是一件坏事。
它不仅可以设定时间,还可以连续的调整计算机计时方式,使其时间不仅准确于某一时刻,而且接近真实时间(误差在几十毫秒内,而不是几十分钟内)。它调整相位(时间)和速率(时钟“滴答”的速度)。NTTP 协议永远不会让时钟倒转。重启后,可能需要很长时间才能确定时钟的滴答速度,因此 ntp 会在名为 /var/lib/ntp/ntp.drift 的文件中跟踪漂移。由于您没有运行 ntp,因此不会发生任何情况。
NTTP 协议不再像以前那么受欢迎,因为休眠的笔记本电脑和台式机以及虚拟机有时会阻止它运行。它被设计为在始终运行的计算机上按照自己的时间表偶尔运行,并且在时间连续的现实世界中也是如此。这可能是它没有默认安装在现代工作站上的原因。[对于 Vmware,请参阅这]
反而ntpdate在网络接口启动时运行。当休眠的笔记本电脑被唤醒时,它会重新建立网络连接,ntpdate运行后,时间又正确了。如果机器的硬件时钟相当准确,并且网络经常通断,那么对于大多数人来说这通常已经足够好了。
由于某种原因股票ntpdate并不总是运行。使用ntpdate-debian在本例中,form.mer 的语法如下ntpdate ntp.ubuntu.com,对于后者来说ntpdate-debian
如果缺少其中任何一项,那么NTTP 协议是保持时间的更好方法。
系统设计为每隔一段时间进行一次定时器中断,并在每次中断时更新其时间概念。只要硬件定时器按规范运行,时间就不会漂移太多。如果硬件定时器没有运行,时间就会漂移得更多(所有此类时钟都会漂移一些,原因与您的手表或电池控制的时钟相同。插在墙上的时钟通过电力公司保持的频率和相位与时间同步)。
大多数计算机计时器由集成电路上的晶体控制振荡器电路控制。尽管有晶体,但它们的运行速度会根据环境(主要是温度)而变快或变慢。除非您安装了我们不知道的某些时间同步软件,否则我会说您的系统时钟不符合规格。
如果你要跑NTTP 协议一两天内,它会将信息存储在 /var/lib/ntp/ntp.drift 中,这些信息会指示它需要调整多少每次中断时操作系统时间前进的速率,以便将硬件时钟速率与通过互联网获取的实际时间相匹配。保持文件不变,只需启动和停止NTTP 协议一分钟后(假设你保持 /var/lib/ntp/ntp.drift 文件不变)可能会做很多事情来纠正这个问题,如果 ntp 设置的时钟偏差在之后保持不变NTTP 协议结束。我不确定这个细节。
我怀疑价值NTTP 协议将存储在 /var/lib/ntp/ntp.drift 与我的有很大不同。
但是,如果这台机器一直在运行,最好的办法是安装NTTP 协议并让它做它的事情。有关在启动之前获取正确时间的详细信息,请参阅其他答案。我运行NTTP 协议在我的桌面上ntpdate在我的笔记本电脑上。
一个有趣的可能的替代方案是 adjtimex,这nealmcb 的回答。
如果你的系统不是一直运行,那么运行ntpdate在启动时似乎是个不错的选择。
警告如果计算机时间倒退,某些软件可能会出现问题。运行ntpdate 后启动可能会导致这种情况发生。
有一个问题,这可能是一个问题:我记得NTTP 协议预计时间不会太远。如果是的话,尽量保守行事,NTTP 协议根本不会调整时间。如果你处于这种情况,最好同时执行这两个操作——运行ntpdate在启动时将时间初始化为正确的时间,然后让NTTP 协议运行以保持其运行,从而提供准确的计时。特别是主板电池损坏可能会导致此错误,启动长时间关闭的计算机也会导致此错误。
答案2
- 通常仅同步时间一次每次启动或从睡眠状态唤醒时
因此问题似乎在于 Ubuntu 的默认时间服务器(它是什么?)的时间不正确,或者 Ubuntu 没有从互联网自动设置时间。
不,Ubuntu 的时间服务器是正确的,并且它会自动从中设置时间。
问题是,通常情况下每次启动时仅执行一次(或者更准确地说,每次启动网络接口时- 无论是关机、睡眠还是休眠)。根据您的正常运行时间,可以肯定地说它已经超过一周没有同步了。而且由于某种原因,您的系统时钟运行得有点快。
cron
-如果您不经常重启,或者您的服务器/桌面从不进入睡眠状态,请设置每小时同步一次
最好的办法是设置一个 cron-job,如果你想要非常精确的时间,我会说每小时一次。最简单的方法是:
sudo editor /etc/cron.hourly/ntpsync
添加以下行:
/bin/bash #!/bin/bash ntpdate ntp.ubuntu.com #或您选择的服务器
- 保存,退出并
sudo chmod +x /etc/cron.hourly/ntpsync
/etc/cron.daily
如果您愿意,您可以每天放入一次。
答案3
如果您安装了 ntp 时间守护程序并且您机器上的时间相差太大而无法快速纠正,就会发生这种情况。
要修复它,请打开终端并执行
sudo service ntp stop
sudo ntpdate swisstime.ethz.ch
date
sudo service ntp start
它的作用是:
- 停止 ntp 守护进程
- 设置时钟
- 现在正是时候
- 重新启动 ntp 守护进程
如果你没有安装 ntp,请使用
sudo apt-get install update
更新:正如这里所建议的,在 cron 作业中使用 ntpdate 会导致细微的问题。
ntpdate 会使时间每隔一小时左右“跳转”。使用 ntp 可避免此问题,因为它会通过扭曲时钟来调整时间。此外,虽然选择附近的 ntp 服务器可以提供更高的准确性,但这并不是必需的。默认 ntp 配置文件中包含多个服务器,服务器会自动补偿任何延迟。
底线: - 使用 ntp - 如果您离得很远,请关闭 ntp,运行 ntpdate 一次并重新启动 ntp。
答案4
我遇到了类似的问题,这是由防火墙中的某些东西引起的。最后我添加了每小时计划任务工作,但添加了-u
参数以ntpdate
使其使用非标准端口。
我的问题是由于 Ubuntu 实际上并没有检查它是否ntpdate
有效,而是自动假设它会有效。