ntpdate 校正是原子的吗?

Pet*_*Woo 5 ntp ntpdate date

从昨天(7 月 30 日)开始,我在 /var/log/syslog 中有以下内容

Dec 16 22:54:05 omap ntpdate[432]: step time server 91.189.94.4 offset 12052648.821465 sec
Run Code Online (Sandbox Code Playgroud)

ntpdate 91.189.94.4 从 7 月 30 日到 12 月 16 日“更正”了我的时钟!根据http://www.pool.ntp.org/scores/91.189.94.4,该服务器的关闭时间不超过 2 毫秒。

现在,我确实有一个脚本,它date在系统启动时调用该命令,以便以大约 1 秒的精度设置时钟。粗时间是从本地网络中读取的,并被date调用来设置时间。由于系统没有实时时钟,并且 NTP 可能无法使用 Internet 连接,因此我必须按照这些方式做一些事情。

我不确定 Linux 在没有可用时钟的情况下如何猜测初始时间,但我观察到它可能非常错误(这是合理的)。我对发生的事情的唯一想法是:

  1. 系统启动并将时钟初始化为某事,例如 3 月 15 日
  2. ntpdate 开始与 NTP 服务器通信,确定 3 月 15 日与实际日期相比有多大错误
  3. 我的脚本将系统时钟设置为 7 月 30 日
  4. ntpdate 确定时钟慢了 12052648s,并添加了更正,假设时钟仍然在 3 月 15 日
  5. 12052648s实际上已添加到 7 月 30 日,使时钟变为 12 月 16 日。

坦率地说,我不太熟悉 NTP 的工作原理。以上合理吗?还能有别的解释吗?

vor*_*aq7 6

我不确定你的时钟是如何进入它所处的状态的,但我可以建议你date尽可能删除调用命令的脚本吗?

在我使用过的大多数系统上,在启动时设置系统时钟的常用方法是:

  1. 启动网络。
  2. 启动ntpd-g同步的时钟。

-g是一个新的选项,它让 ntpd 将时钟调整到任何时间——如果您的版本ntpd不支持该 fkag,您将ntpdate -b some.time.server在启动 NTP 守护进程之前运行

如果您的系统太旧以至于它正在做与此完全不同的事情,那么它可能也太旧了以至于不受支持,所以我会毫不犹豫地将启动脚本更改为更加理智......


Mic*_*ton 4

在不了解更多有关您的设置的情况下,您的理论听起来似乎是合理的。

您将需要更改启动脚本以确保date设置系统日期的命令在启动之前完成ntpdate