如何自定义 NTP 轮询率?

如何自定义 NTP 轮询率?

我正在一台通过蜂窝连接运行的嵌入式机器上设置 Ubuntu,我们按字节付费。该机器也没有 RTC 电池,因此每次启动都会从随机时间启动。

我想确保在蜂窝连接可用时时间同步,以便日志消息等具有真实时间,但我也不想为 NTP 流量付出高昂的费用。

我可以自定义 NTP 更新时间的频率吗?我目前正在使用 openntpd,但我并不习惯使用它。

互联网不一定在启动时启动,因此启动时 ntupdate 和相关程序不起作用。通过 cron 进行调度意味着等待计划任务启动,而我希望时间守护程序能够尽快获得时间同步。

答案1

我的经验是使用 ntp 而不是 openntpd。

您应该知道,NTP 协议通常以每分钟(64 秒)发送一次数据包开始,但通常会以每 17 分钟为 /etc/ntp.conf 文件中的每台服务器发送和接收一个数据包的方式稳定下来。但是,网络中断或设备时钟不稳定可能会增加这个时间。每个数据包的有效载荷约为 68 字节,因此每次轮询的单向有效载荷可能略大于 100 字节。

网络启动时使用 rdate 和 ntpdate 来设置时间是个不错的主意。如果这就是你所需要的,那么它应该对你很有用。

但是,如果您需要在较长时间内保持时间同步,ntp 协议就是为此而设计的。设备中的时钟会根据温度变化而变快或变慢,即使设备可能有一个晶体控制时钟 - 而持续计时就是为了对此进行调整。

如果您需要持续计时并希望减少带宽使用,这里有一些建议。它们参考了 ntp.conf 中的项目。

不要使用 iburst。(但最初设置时间会花费更多时间)。

将 minpoll 从 6 向上增加(2^6 秒为 64 秒)。这可减少网络启动后协议启动时的流量。

将 maxpoll 从 10 向上增加(2^10 秒是 1024 秒或大约每 17 分钟一次)。您可以将其增加到 17,以便大约每 36 小时轮询一次。我自己还没有尝试过。

只使用最少数量的服务器,如果您有一个可以从嵌入式设备可靠访问的服务器,那就太好了。服务器越多,计时就越可靠,但流量也会增加,所以这是一个权衡。

答案2

其中一些答案可能会赢得混淆的 ntp 配置竞赛。

使用 ntp 参考实现并使用 iburst 在启动时快速设置时间。之后,您可以使用 minpoll 指令来限制 ntpd 查询远程时间服务器的频率。这将允许您利用 ntpd 的时钟约束并降低带宽。

minpoll minpoll
maxpoll maxpoll
    These options specify the minimum and maximum poll intervals for NTP 
    messages, in seconds as a power of two. The maximum poll interval 
    defaults to 10 (1024 s), but can be increased by the maxpoll option to 
    an upper limit of 17 (36 h). The minimum poll interval defaults to 6 (64 s), 
    but can be decreased by the minpoll option to a lower limit of 3 (8 s).

克罗尼是 ntp 参考实现的良好替代方案。Openntpd 不是。

答案3

当蜂窝接口出现时,您可以做一些黑客操作,包括运行 ntpdate。但如果可以的话,安装 chrony 会是一个更好的选择,因为它在创建时就考虑到了间歇性网络访问

答案4

您是否需要 ntp 提供的精确同步?如果不需要,您可能可以在启动时使用rdatentpdate,然后定期通过 cron 使用。

相关内容