如何自定义NTP轮询速率?


17

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

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

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

互联网不一定在启动时启动,因此启动时ntupdate和相关功能将无法正常工作。通过cron进行调度意味着等待调度的任务开始,而我希望时间守护程序能够尽快获得时间同步。

Answers:


5

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


8

我的经验是使用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分钟)向上增加。大约每36小时您最多可以进行17次轮询。我自己没有尝试过。

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



3

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

如果您是一次性的时间同步,而不是恒定的同步,那么这对您来说就足够了。

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


2

您需要ntp提供的精确同步吗?如果不是这样,您也许可以通过使用rdatentpdate在启动时摆脱困境,然后定期通过cron 摆脱困境。


2

您可能已经阅读过openntpd手册页。

http://www.openbsd.org/cgi-bin/man.cgi?query=ntpd.conf

您可能已经注意到缺乏时间轮询选项。

我提出以下这些可能的技巧:

  1. 不要使用任何ntpd,只需通过cron调用ntpdate即可。
  2. 如果要允许,请使用cron和/或您的蜂窝连接脚本切换iptables规则以丢弃或允许123端口通信。这可能很简单

    0 12 * * * iptables -D OUTPUT -j DROP -p udp --dport 123 # at noon start allowing ntp

    0 13 * * * iptables -A OUTPUT -j DROP -p udp --dport 123 # at 1pm stop allowing ntp

  3. 将无线电时钟接收器嵌入到嵌入式计算机中。我对此一无所知,但产品如下:

让我认为如果可以接收无线电信号并不难。


1
如果要添加硬件,为什么要推荐一个无线电时钟,而不要添加带有PPS的GPS?
dfc 2014年

@dfc好点。OP,请考虑使用GPS硬件来获取时间。
Jay _silly_evarlast_ Wren

1
花费50美元(当然,这是很大的一笔GPS)和一些焊接,我在备用卧室中有1层时间服务器。我将Sure GPS天线坐在一扇被巨大枫树和另一所房屋遮挡的窗户上,它运作良好。
dfc

@dfc可以链接到硬件以及与该硬件一起使用的软件吗?
Jay _silly_evarlast_ Wren

1
@Jay_silly_everlast_Wren软件:ntp参考实现www.ntp.org董事会:sureelectronics.net/goods.php?id=99几次 讨论:satsignal.eu/ntp/Sure-GPS.htmlists.ntp.org/pipermail/questions /2011-March/028854.html还有更多内容。不要被焊接吓到。这是我第一次焊接,很容易。ntp问题邮件列表中挤满了使用肯定委员会并对此感到非常满意的人。
dfc 2014年

1

如果我没记错的话,ntp轮询间隔可以设置为最大1024秒。也许最简单的解决方案是在每次启动时运行ntpdate,然后不时从crontab中运行。

如果您的时钟在每次启动时都以随机时间开始,那么您可能始终无法运行ntpd,则必须先使用ntpdate。如果您的时钟与服务器时钟之间的差异太大,则Ntpd拒绝同步时间。


+1有关ntp拒绝同步(如果漂移太大)的信息
David Pfeffer

用ntpdate是赞成的选项弃用ntpd这将更好地处理这个用例比cronCAN eecis.udel.edu/~mills/ntp/html/ntpdate.html
城市生活垃圾

1

NTP和TCP一样,在协议中也有一些深入的理论和实践经验。如果更改其基本参数,它将停止具有其设计的同步属性。

如果您的设备是零星连接的,也许不错的旧RDATE将为您提供最好的服务。它不处理时钟转换,也不进行对等平均,也不能针对中间人可能值得玩的各种细微骇客进行保护。它只是从远程服务器获取参考日期,然后用锤子敲打本地时钟。但是,它可以在您需要时执行,并且其行为是确定性的。

RDATE的准确性远远不如NTP所能提供的,我不相信它会超过±1秒,但是如果只是偶尔安装,则更精确的计时就无关紧要了。实际上,根据相对论,它甚至可能没有意义。


0

为了使minpool/ maxpool被考虑进去,你必须再添加每台服务器在你的ntp.conf

不建议您将NTP守护进程弄乱(它具有内置的mathod以优化频率),但您需要添加以下这些选项:

server time.google.com iburst minpoll 12 maxppol 17
server ntp.ubuntu.com iburst minpoll 12 maxppol 17
server europe.pool.ntp.org iburst minpoll 12 maxppol 17

在这里,如果将最小频率设置为2 ^ 12秒,将最大频率设置为2 ^ 17秒。

默认情况下,我发现NTP将每分钟左右发出一个请求。太过分了。在这里,我将频率从每小时一次减少到每天一次(合理地)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.