【发布时间】:2016-04-04 03:47:35
【问题描述】:
背景: 嗨,我目前正在使用旧的 Linux SBC 系统。它使用旧的 BusyBox v1.00-rc2,它的功能有限。 (不,升级不是一种选择)。这个单板机连接了几个传感器,记录数值并打上时间戳。
问题: 几年后,RTC 偏离了实际时间,一些 SBC 与实际时间延迟了 1 小时以上(更慢)。
我不能简单地对 ntp 服务器进行 ntpdate,因为它会导致时间跳跃并导致数据监控日志上的巨大差距。这是不可接受的。
解决方案: 我创建了一个 bash 脚本,它将:
- 使用 SBC 和 ntp 服务器检查 ntp 偏移量
- 然后,在变量中记录偏移量
- 如果偏移值大于 7,例如(60 秒偏移),脚本将使用 date -s 命令一点一点地增加系统时钟。
- 每小时最多增加 60 秒
- 示例:
- SBC 时间为 2016 年 4 月 4 日 14:59:00
- ntp 服务器的实际时间是 2016 年 4 月 4 日 15:00:00
- 如果我使用 ntpdate -q -4 utcnist2.colorado.edu,它将返回 60 秒的偏移量
- 所以,我的脚本只会增加 7 秒每 450 秒
- 按照这个逻辑,SBC 时间将在 4 月左右赶上 ntp 时间4th 16:04:17 2016
- 问题是,这个脚本会一步一步慢慢调整时间,但是有时候,它会出问题,SBC时间会比实际时间(Ntp时间),这将导致数据丢失(如果SBC时间比服务器时间快,服务器将不接受)。
问题:
- 还有其他方法可以进行类似的增量时间跳转吗?
- 我注意到 ntpdate 具有 -B 功能,可以进行增量时间更新,但我未能在 SBC 上使用它。使用此开关的正确方法是什么?还是我误解了它的功能?
- adjtimex 能达到这个目的吗?
- 这是我完整的 bash 脚本,如果你们有需要的话(太长,无法粘贴到这里),
http://pasted.co/65beb3db[密码:123456]
【问题讨论】:
-
使用您的脚本,您离实时有多近?您是否也看过这个 (support.ntp.org/bin/view/Dev/DeprecatingNtpdate) 页面 - 特别是
ntpd -x这可能会有所帮助。 -
@user3788685,您好,感谢您的建议。 ( - 我的脚本可以实时接近多少?) Ans : 我的脚本每 7.5 分钟(450 秒)增加 7 秒,它会这样做,直到 NTP 服务器返回的偏移量小于 7 并且将与实际时间。所以,要回答这个问题,我想它非常接近(~1 秒容差)(-关于 ntpd -x) 回答:是的,但它似乎不适用于我现在正在运行的 busybox 版本。还是我的语法错误?
-
Busybox 在我几年前尝试时总是有点缺乏 - 它没有构建/工作所有东西。我的想法是,如果您的脚本让您足够接近而不会跳到您,然后启用 ntpd 以在无需运行脚本的情况下检查事情(或者我在这里遗漏了什么)
标签: linux bash ntp busybox ntpd