首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何实现增量时间飞跃以避免数据丢失

如何实现增量时间飞跃以避免数据丢失
EN

Stack Overflow用户
提问于 2016-04-04 03:47:35
回答 1查看 355关注 0票数 4

背景: Hi,我目前正在使用一个旧的Linux系统。它使用的是BusyBox v1.00-rc2,它很老,功能有限。(不,升级不是一个选项)。这个SBC是与几个传感器连接,记录值和时间戳它。

问题:在几年后,RTC从实际时间漂移,一些SBC延迟超过1小时(慢于实际时间)。

我不能简单地对ntp服务器执行ntpdate,因为它会导致时间跳转,并导致数据监视日志上的巨大空白。这是不可接受的。

解决方案:我已经创建了一个bash脚本,它将:

  1. 使用SBC和ntp服务器检查ntp偏移量
  2. 然后,将偏移量记录在变量中。
  3. 例如,如果偏移值大于7 (60秒偏移量),脚本将使用date -s命令一点一点地增加系统时钟。
  4. 每小时最多增加60秒。
  5. 示例:
    • SBC时间是2016年4月4日14:59:00
    • 来自ntp服务器的实际时间为2016年4月4日下午3:00
    • 如果我使用ntpdate -q -4 utcnist2.colorado.edu,它将返回60秒偏移量。
    • 因此,我的脚本将只增加每450秒7秒
    • 根据这一逻辑,SBC时间将赶上4/4 16:04:17 2016的ntp时间。
    • 的问题是,这个脚本设法逐步缓慢地调整时间,但是有时,它会变得混乱,而SBC时间将比实际时间(Ntp时间)更快,这将导致数据丢失(如果SBC时间比服务器时间快的话,服务器将不接受)。

问题:

  • 还有其他类似于此的增量时间跳转的方法吗?
  • 我注意到ntpdate有执行增量时间更新的-B函数,但是我没有在SBC上使用这个函数。使用这个开关的正确方法是什么?还是我搞错了它的功能?
  • adjtimex能达到这个目的吗?
  • 这是我完整的bash脚本,如果你们中的任何人需要它(太长而不能粘贴在这里),

http://pasted.co/65beb3db密码: 123456

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-14 01:36:55

关于这件事,我已经得出结论。有两个解决方案(根据我的经验)。也许更多。请随意添加):

解决方案1

  • 来源:http://www.ep.ph.bham.ac.uk/general/support/adjtimex.html
  • 方法:更改linux滴答计数和频率。所有计算都可以在L.S.Lowe at bham.ac.uk的javascript中看到(在链接中)。
  • 示例:如果我想使系统时钟每小时快60秒,我需要更改(tick = 10167)和(频率= -2184533),并使用adjtimex -t 10167 -f -2184533应用它。

解决方案2 (我现在正在使用的)

  • 在上面的问题中,我已经提到我使用的是旧版本的busybox,我不能使用许多最新的函数,比如ps -anySwitch来获取当前运行过程的pid。Pidof myscript.sh命令也没有产生任何结果。
  • 因此,在上面的bash脚本中,我在脚本的顶部创建了一个函数,这样每当我的脚本通过cron启动时,也就是每15分钟,我的脚本就会检查文件中存储的pid。如果pid仍在运行,则新脚本将终止自身。这是为了避免多个脚本每15分钟运行一次。
  • 我怀疑,这种方法有一些缺陷。由于某些原因,脚本将运行多次,并导致时间增量变得更快(因为有多个脚本正在运行)。
  • 因此,为了避免这种怀疑,我修改cron以运行另一个脚本,以检查我的脚本是否正在运行,而不是每15分钟运行一次脚本。
  • 我发现,如果我使用此方法-> ./myScript启动脚本,则可以使用pidof myscript获得pid号。
  • 因此,使用这种方法,避免任何灰色区域,都是很有保证的。
  • 直到现在,我似乎已经解决了我的问题。
  • 启动程序脚本示例:

/bin/sh pid=pidof NTP_Update 如果-n "$pid“;那么回显"NTP_Update正在运行.”否则回音"NTP_Update不运行.“cd /root/script ./NTP_Update fi

希望这个方法能帮助那些与旧的忙碌盒版本做斗争的人。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36394264

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档