当前位置: 首页>>技术教程>>正文


如何自定义 NTP 轮询率?

问题描述

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

我想确保当蜂窝连接可用时时间同步,以便日志消息等具有实时时间,但我也不想为 NTP 流量支付大量费用。

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

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

最佳方案

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

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

网络启动时的 rdate 和 ntpdate 是设置时间的好主意。如果这就是您所需要的,那么应该很适合您。

但是,如果您需要在较长时间内保持时间同步,则 ntp 协议就是为此而设计的。你的设备中的时钟会根据它的温度或冷度而运行得有点快或慢,即使它可能有一个水晶控制的时钟——并且持续的计时是为了适应这一点。

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

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

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

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

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

次佳方案

其中一些答案可能会赢得混淆的 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).

Chrony 是 ntp 参考实现的一个很好的替代方案。 Openntpd 不是。

第三种方案

您可以进行一些黑客操作,包括在单元界面出现时运行 ntpdate。\n但如果可以的话,安装 chrony 将是更好的选择,如 it was created with intermittent network access in mind

第四种方案

在默认安装的 Ubuntu 上,NTP 守护程序不会运行。相反,每次 /etc/network/if-up.d/ntpdate 挂钩启动网络接口时都会设置时间。

如果您想要 one-off 时间同步而不是持续同步,那么这对您来说可能就足够了。

您可以通过标准 /etc/ntp.conf 文件或 /etc/default/ntpdate 中的 NTPSERVERS 变量来控制查询哪些服务器来设置时间。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/14133.html,未经允许,请勿转载。