在 Raspberry Pi 重新启动崩溃的驱动程序

Restarting crashed drivers on Raspberry Pi

我目前正在使用 ACR122U reader 开发 NFC 系统,而不是使用构造驱动程序,这会导致这些驱动程序偶尔发生崩溃。 这里的问题是,当它崩溃时,整个过程并没有崩溃,我的程序保持 运行 但驱动程序没有。 (不用说它使我的代码无用) 我知道重新启动崩溃程序但不知道崩溃驱动程序的方法。我考虑过使用看门狗来硬重置覆盆子,但不用说重启不是最佳选择,因为它需要时间。 (我正在使用第一个 Raspberry)。 那么,有没有办法只重启驱动程序,更重要的是,检测它何时失败?

经过许多小时的研究和试验,我找到了解决我自己问题的方法。解决方案实际上非常简单:只需一个背景 运行 脚本(在我的例子中是我的程序),每两秒使用 grep 检查一次:

#!/usr/bin/env bash

command="/your/path/to/your_script"
log="prog.log"

match="error libnfc"

matchnosp="$(echo -e "${match}" | tr -d '[:space:]')"

$command > "$log" 2>&1 &

pid=$!

while sleep 2
do
    if fgrep --quiet "$matchnosp" "$log"
    then
         echo "SOME MESSAGE"
         kill $(pidof your_script)
         $command > "$log" 2>&1 &
         sleep 5
         truncate -s 0 $log      
         echo "SOME OTHER MESSAGE..."
   fi
done

当在日志文件中找到一些匹配 "error libnfc" 的消息时,这会重新启动程序。