实时时钟是错误的(从几小时到几年),在启动时需要一次性的非单调变化。 Chrony能解决这个问题吗?

我不能保证在某些机器上有一个健全的实时时钟(时间可能是几个小时,几个月甚至几年)。 由于我也有断断续续的networking,我build立了Chrony,希望能够解决这个问题。

但是Chrony似乎想要随着时间的推移缓慢地调整时钟,保持时钟的单调性而不会发生剧烈的变化。 当漂移大约在几秒钟内,这就足够了,但对我来说这不是一个解决scheme(在我的testing中,需要几个小时来纠正10分钟的漂移)。 maxupdateskew ,我禁用了maxupdateskew

我真正想要的是在启动早期进行大的改变(如果时间设定在将来,则是非单调的),精确到秒或(甚至更好)毫秒级,并且在应用之后,ntp客户端可以自由地做其逐步调整。 我认为这是ntp客户端的一个重要用例,特别是没有RTC的机器,但是我找不到适合这个问题的解决scheme。

我已经考虑了以下几点:

  1. 运行hwclock --set --date="$(magically-get-correct-time)"; hwclock -s 在Chrony完成工作之前。 问题是, magically-get-correct-time仍然需要收集ntp或其他服务,然后我必须安排Chrony成功后运行..这是很棘手的做(如:如果这个命令失败,因为networking是穷人?这可能很快变得复杂)。 一般来说,这感觉像pipe道录音。

  2. 在Chrony之前使用ntpdate 。 谷歌告诉这是在一些论坛build议。 我不知道这个工作会如何,也感觉像胶带。 (另外,ntpdate被报告为不赞成)

现在,我实际上正在寻找的是一种只用Chrony来解决这个问题的方法。 是什么让我认为它可以解决这个问题呢,Fedora Wiki上关于Chrony的页面就是默认的NTP客户端 。 它声称:

在初始同步之后,时钟永远不会步进,这对于需要系统时间单调的应用是很好的

对我来说,这表明在初始同步的过程中 ,Chrony可能会进行非单调步进。 或者我希望。 但在我的安装,当它说

 Feb 19 17:15:30 black chronyd[696]: System clock wrong by -759.702379 seconds, adjustment started 

不会跳跃到积极纠正它尽快; 它反而在几个小时内传播变化,从不做非单调变化。 所以我没有看到任何提到的“初始同步”。 而且我还没有能够find如何configuration它进行任何非单调调整。

顺便说一句,我用Chrony 1.27运行Arch Linux

如文档中所示,使用initstepslew

例如:

 initstepslew 30 0.pool.ntp.org 1.pool.ntp.org 2.pool.ntp.org 

并更换电池…