linux – 在线时使用NTP同步时钟,在离线时使用RTC同步?

是否存在在线时将 Linux系统与NTP同步的现有机制,以及在离线时可预测的漂移RTC?

我们运营远程“收集器”:嵌入式Linux系统,用于收集传感器数据并对其进行时间戳.我们需要他们的时钟误差保持相当小,比如低于5秒.通常我们使用NTP来同步他们的时钟,并且只要系统在线,它就可以正常工作.

问题是一些收集器的上行链路非常糟糕,可能会持续数小时,数天甚至数周.这并没有阻止本地数据收集,但是如果没有NTP,Linux系统时钟会严重且无法预测地漂移.

OTOH,硬件的RTC也大量漂移,但速度不变. RTC漂移率因板而异,但每块板是恒定的并且可以测量.

我想我们需要的是一种执行以下操作的机制:

>在部署之前测量电路板的RTC漂移率
>尽可能通过NTP定期/定期调整系统时间
>当NTP不可用时,定期从RTC调整系统时间.考虑已知的RTC漂移率.
>可选:测量并记录在线时正在进行的RTC漂移率(1)

“机制”是指一些维护良好,文档化的软件和/或配置,可以处理“在线”与“离线”两种状态,确保系统时钟与正确的时间源同步(ntp vs. rtc),检测状态变化,并校正RTC漂移.它是作为一个特殊的ntpd配置/插件实现,作为一个单独的守护进程实现,作为一个cron作业,也无关紧要.

我看了Chrony,但根据其documentation,它试图预测系统时钟的漂移,在我们的情况下漂移比RTC更加不可预测. Chrony似乎只使用RTC来重新启动时间.

(1)注意ntpd激活内核的’11 -minute模式'(每11分钟从系统时钟更新rtc).目前的内核和ntpd似乎没有办法阻止11分钟的模式.因此,当ntpd运行时,任何rtc漂移信息都会丢失(thx @billthor).

更新/编辑:

>我们正在考虑通过USB或串行为MSF或DCF77信号(我们位于欧洲)添加外部无线电时钟.但我们宁愿保持硬件精益.
>我们的收藏家位于室内,通常在地下室.因此添加GPS时钟无济于事.
>我们使用Debian 7.这意味着hwclock来自util-linux-2.20.1,ntpdate-4.2.6p5,ntpd来自ntp-4.2.6.p5,chrony-1.24(可能是1.30).
>请注意,我们的问题并不在于我们不知道如何使用ntpdate(8),hwclock(8),date(1)等.请参阅斜体添加的部分,了解我对’机制’的含义.
>添加了关于’11 -minute模式’的脚注
> Here是关于离线同步和RTC漂移的非常有趣的讨论

解决方法

你的情况很不寻常,如果有人想出一个基于ntpd的标准配置来做你想做的事情,我会感到惊讶.也就是说,我喜欢感到惊讶,并且经常在这些部分周围发生.

但是,直到有人提出更好的想法,您是否考虑过像这样的crontab条目?

*/5 * * * *   ntpdate 0.pool.ntp.org || ( hwclock --adjust; hwclock --hctosys )

IE,每五分钟尝试通过ntpdate同步时钟,如果(并且仅当)失败,根据/ etc / adjtime文件调整硬件时钟漂移(其格式在man hwclock中详细说明,并且其第一行您已根据您对特定RTC速率的了解进行了适当填充),然后从RTC设置系统时钟.

请注意,如果您要使用这样的解决方案,并且要部署任意数量的这些系统,那么使用该池会被认为是礼貌的,并且会根据您的使用情况按比例提供服务器.您可以在http://www.pool.ntp.org/en/vendors.html找到更多信息.

相关文章

Linux中的ARP防火墙主要用于防御ARP欺骗攻击,其效果取决于多...
insmod和modprobe加-f参数导致Invalid module format错误 这...
将ArchLinux安装到U盘 几个月前入门Arch的时候上网搜了不少安...
1、安装Apache。 1)执行如下命令,安装Apache服务及其扩展包...
一、先说一下用ansible批量采集机器信息的实现办法: 1、先把...
安装配置 1. 安装vsftpd 检查是否安装了vsftpd # rpm -qa | ...