在 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" 的消息时,这会重新启动程序。
我目前正在使用 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" 的消息时,这会重新启动程序。