我使用的是ARM嵌入式设备,但我认为这是一个常见的Linux问题。
我使用带有'file‘选项的Linux watchdog守护进程来定期检查我的应用程序每隔xx秒更改一次的时间。这工作得很好,但我注意到,如果系统时间很远,NTP更新时间,那么看门狗就会重新启动。可能是因为注意到文件上的统计数据发生了很大的变化(时间是过去的几个月,所以在校正后的时间会提前),所以它可能有一种刺耳的感觉。
我无法禁用watchdog,因为我启用了NOWAYOUT选项,并且为NTP启用了'tinker tinker 0‘选项,因为它是一个嵌入式设备,可能长时间未连接到网络,或者关闭电源的时间超过了RTC备份的持续时间。
我认为在我的应用程序调用'utime‘来修改文件的瞬间,设备就会重启。我不确定这是在NTP完成它的工作之前还是之后。在一些设备上,时间似乎不会永久更改,因为它会由于看门狗而重新启动并无限重复。我认为watchdog在重启之前执行的操作之一是更新硬件时间?
发布于 2018-12-01 10:16:28
是的,这是看门狗服务的一个巨大弱点。只要更新操作系统的时间超过文件检查间隔,文件检查就会失败,系统就会重新启动。
我所做的就是放弃了file=检查,转而使用test-binary=。这样,watchdog执行脚本,该脚本使用单调时钟而不是挂钟来检查文件的更改。
发布于 2018-11-28 06:53:51
首先,watchdog守护进程永远不应该更新系统时间,这包括在导致系统重新启动之前。看门狗守护进程并不是导致重启的真正原因,当看门狗没有被“宠爱”时,系统硬件会这样做。
要让看门狗正常工作,您需要了解设备的硬件是如何工作的,以及将“宠爱”看门狗的守护进程如何做出“宠爱”或“不宠爱”的决定。
您没有为我提供足够的信息来查看您的嵌入式设备的文档,或者守护进程本身的源代码。我的建议是,您可以“尽您所能”使NTP在监视器有机会超时之前设置系统时间。我还建议您查看您正在使用的watchdog版本的包信息,并将其作为错误报告给维护者。正如硬件看门狗不受系统时间更改的影响一样,软件看门狗也不应该受到影响。当前的系统正常运行时间是可用的,我希望软件监视器--守护进程--能够处理挂钟时间的变化,而无需重启系统。
https://stackoverflow.com/questions/49351058
复制相似问题