背景: 嗨,我目前正在使用旧的 Linux SBC 系统。它使用旧的 BusyBox v1.00-rc2,它的功能有限。(不,升级不是一种选择)。这个 SBC 连接了几个传感器,记录值并加盖时间戳。
问题: 几年后,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 秒的偏移量
- 所以,我的脚本每 450 秒只会增加7 秒
- 按照这个逻辑,SBC 时间将在2016 年 4 月 4 日 16:04:17左右赶上 ntp 时间
- 问题是,这个脚本会一步一步慢慢调整时间,但有时会出问题,SBC时间会比实际时间(Ntp时间)更快,这会导致数据丢失(服务器不会如果 SBC 时间快于服务器时间,则接受)。
问题 :
- 有没有其他方法可以进行与此类似的增量时间跳跃?
- 我注意到 ntpdate 有 -B 函数可以进行增量时间更新,但我没有在 SBC 上使用它。使用此开关的正确方法是什么?还是我误解了它的功能?
- adjtimex 能达到这个目的吗?
- 这是我完整的 bash 脚本,如果你们有需要的话(太长,无法粘贴到这里),
http://pasted.co/65beb3db [密码:123456]