Linux 如何进行增量时间跳跃以避免数据丢失
背景: 您好,我目前正在使用一个旧的Linux SBC系统。它使用BusyBox v1.00-rc2,这是旧版本,功能有限。(不,升级不是选项)。该SBC与多个传感器连接,记录值并加盖时间戳 问题: 几年后,RTC偏离实际时间,一些SBC延迟超过实际时间1小时(较慢) 我不能简单地使用ntp服务器进行ntpdate,因为它会导致时间跳跃,并在数据监视日志上造成巨大的间隙。这是不可接受的 解决方案: 我创建了一个bash脚本,它将:Linux 如何进行增量时间跳跃以避免数据丢失,linux,bash,ntp,busybox,ntpd,Linux,Bash,Ntp,Busybox,Ntpd,背景: 您好,我目前正在使用一个旧的Linux SBC系统。它使用BusyBox v1.00-rc2,这是旧版本,功能有限。(不,升级不是选项)。该SBC与多个传感器连接,记录值并加盖时间戳 问题: 几年后,RTC偏离实际时间,一些SBC延迟超过实际时间1小时(较慢) 我不能简单地使用ntp服务器进行ntpdate,因为它会导致时间跳跃,并在数据监视日志上造成巨大的间隙。这是不可接受的 解决方案: 我创建了一个bash脚本,它将: 检查SBC和ntp服务器的ntp偏移 然后,在变量中记录偏移量
- SBC时间为2016年4月4日14:59:00
- ntp服务器的实际时间为2016年4月4日15:00:00
- 如果我使用ntpdate-q-4utcnist2.colorado.edu它将返回60秒的偏移量
- 因此,我的脚本每450秒只会增加7秒
- 按照这种逻辑,SBC时间将在2016年4月4日16:04:17左右赶上ntp时间
- 问题是,此脚本设法一步一步地缓慢调整时间,但是有时,它会失控,SBC时间会比实际时间(Ntp时间)快,这将导致数据丢失(如果SBC时间快于服务器时间,服务器将不接受)
- 有没有其他类似的方法来进行增量时间跳跃
- 我注意到ntpdate有一个-B函数,可以进行增量时间更新,但是我在SBC上没有使用这个函数。使用此开关的正确方法是什么?还是我安装错了它的功能
- adjtimex能达到这个目的吗
- 这是我完整的bash脚本,如果你们需要的话(太长,无法粘贴到这里)
关于这件事,我已得出结论。有两种解决方案(根据我的经验,可能更多。请随意添加): 解决方案1
- 资料来源:
- 方法:更改linux勾号计数和频率。所有计算都可以在javascript中通过bham.ac.uk上的L.S.Lowe查看(链接中)
- 示例:如果我想将系统时钟加速到每小时快60秒,我需要更改(滴答=10167)和(频率=-2184533),并使用adjtimex-t 10167-f-2184533应用它
解决方案2(我现在正在使用的)
- 在我上面的问题中,我已经提到我使用的是busybox的旧版本,我不能使用很多最新的函数,比如ps-anySwitch来获取当前运行进程的pid。Pidof myscript.sh命令也没有产生任何结果
- 因此,在上面的bash脚本中,我在脚本的顶部创建了一个函数,这样每当我的脚本由cron启动时(每15分钟一次),我的脚本都会使用存储在文件中的pid进行检查。如果pid仍在运行,新脚本将自行终止。这是为了避免每15分钟运行多个脚本
- 我怀疑,这种方法有一些缺陷。由于某些原因,脚本将多次运行,并导致时间增量变得更快(因为有多个脚本正在运行)
- 因此,为了避免这种怀疑,我没有每15分钟运行一次脚本,而是修改了cron以运行另一个脚本来检查脚本是否正在运行
- 我发现,如果我使用此方法->./myScript启动脚本,我可以使用pidof myScript获取pid编号
- 因此,使用这种方法并避免任何灰色区域将是非常有保证的
- 直到现在,我似乎已经解决了我的问题
- 启动程序脚本示例:
NTP\U更新的pid
如果[-n“$pid”];然后回显“NTP_更新正在运行…”否则回显
“NTP_更新未运行…”cd/root/script./NTP_更新fi
希望这个变通方法能帮助那些在旧busybox版本中苦苦挣扎的人。使用您的脚本,您离实时有多近?您也看过这个()页面了吗?特别是ntpd-x
,这可能会有所帮助。@user3788685,您好,谢谢您的建议。(-我的脚本与实时的距离有多近?)Ans:我的脚本将每7.5分钟(450秒)增加7秒,它将这样做,直到NTP服务器返回的偏移量小于7,并将与实际时间同步。所以,为了回答这个问题,我想它与ntpd-x非常接近(~1秒容差)(-关于ntpd-x)Ans:是的,但它似乎不适用于我现在运行的busybox版本。或者可能是我的语法错了?几年前我尝试Busybox时,它总是有点欠缺-它没有构建/运行所有功能。我的想法是,如果你的脚本让你离得足够近,而不是让你跳起来,那么就可以让ntpd在不需要运行脚本的情况下检查事情(或者我在这里遗漏了什么)