从昨天(7 月 30 日)开始,我在 /var/log/syslog 中发现了以下内容
Dec 16 22:54:05 omap ntpdate[432]: step time server 91.189.94.4 offset 12052648.821465 sec
ntpdate 91.189.94.4 将我的时钟从 7 月 30 日“校正”为 12 月 16 日!根据http://www.pool.ntp.org/scores/91.189.94.4,该服务器的关闭时间不超过 2ms。
现在,我确实有一个脚本,它date
在系统启动时调用该命令,以便以大约 1 秒的精度设置时钟。粗略时间是从本地网络读取的,并被date
调用来设置时间。我必须按照这样的思路做些事情,因为系统没有实时时钟,而且互联网连接可能无法用于 NTP。
我不确定 Linux 在没有时钟可用的情况下如何猜测初始时间,但我观察到它可能非常错误(这是合理的)。我对发生的事情的唯一想法是:
- 系统启动后将时钟初始化为某个偏离的时间,比如 3 月 15 日
ntpdate
开始与 NTP 服务器通信,确定 3 月 15 日与实际日期的误差- 我的脚本将系统时钟设置为 7 月 30 日
ntpdate
确定时钟慢了 12052648 秒,并添加了校正,假设时钟仍为 3 月 15 日- 12052648s 是实际上加上 7 月 30 日,时钟指向 12 月 16 日。
坦白说,我不太了解 NTP 的工作原理。上述解释合理吗?还有其他解释吗?
答案1
在不进一步了解您的设置的情况下,您的理论听起来很有道理。
您将需要更改启动脚本以确保date
设置系统日期的命令在启动之前完成ntpdate
。
答案2
我不确定您的时钟是如何进入现在的状态的,但date
如果可能的话,我可以建议您消除调用该命令的脚本吗?
在我使用过的大多数系统上,启动时设置系统时钟的通常方法是:
- 启动网络。
ntpd
从-g
同步时钟 开始。
-g
是一个较新的选项,它允许 ntpd 将时钟调整到任何时间——如果你的版本ntpd
不支持该fkag,那么ntpdate -b some.time.server
在启动NTP守护进程之前你需要运行
如果您的系统太旧,以至于它所做的事情与此完全不同,那么它可能也太旧而不受支持,所以我会毫不犹豫地将启动脚本更改为更加合理......
答案3
您为什么不使用 ntpd?
ntpd 在确保您的时钟正确方面比 ntpdate 更有效,因为它将更新缓冲为更小的变化,以避免对系统造成任何冲击。
而且它确实不会将您的时钟更改为其他月份偶然!
我会提供关于如何在您的系统上安装和启用 ntpd 的更精确的说明,但您没有指定您的发行版。