在监视程序执行之前,如何执行某些脚本(在我的情况下,它将脚本将日志复制到闪存或远程复制日志)?
我应该修改linux内核看门狗驱动程序吗?如果是这样的话?或者也许有可能通过以下方式配置:
/etc/default/watchdog
/etc/watchdog.conf
但是我们安装了busybox,其中看门狗配置有限。我在谷歌上找不到任何东西,有什么令人惊讶的,因为这是需要解决的基本问题 - 每个人都希望在持久性内存中看门狗复位后有日志,闪存不是/ var / log / path。
当然,在正常的设备生命周期中不时将日志复制到闪存的解决方案并不是一个好主意,因为应该有一些解决方案,当feed / dev / watchdog上的看门狗超时到期时如何执行此操作。
在比4.9更新的Linux内核上,你应该有pretimeout调控器框架的可用性,它允许你编写一个linux内核驱动程序,它会对超时前的检测作出反应。像这样的解决方案远远超出了简单问题和答案的范围,所以我将离开原来的答案。
TL; DR:
如果在操作系统仍在运行时可以检测到问题,则可以刷新日志。如果问题是由操作系统锁定引起的,那么您将无法解决问题,因为硬件将重置该框。
这里有两件事:
看门狗设备通常是一个硬件定时器,当它的定时器到期时它将做“特别低级别的东西”。最常见的低级别事情是重置框。如果它发生在硬件中,则没有操作系统参与。一旦计时器用完,你就没有机会做任何高水平的事 - 例如在某处写日志文件。
看门狗程序是一种工具,只要满足检查条件,就可以定期对看门狗设备放心。
busybox看门狗定时器的条件是一个简单的循环(伪代码):
while (1) {
# reassure watchdog
# sleep some time
}
所以如果程序停止运行 - 例如通过操作系统锁定或终止程序,底层硬件将简单地踢出框。
“更大”的看门狗二进制文件提供了一系列检查,如果它们失败,那么它将触发repair-binary
中的/etc/watchdog.conf
选项以尝试恢复。这将是刷新日志的潜在点。