カーネルパニックが発生したときに自動的に再起動したい組み込みLinuxシステムがあります。しかし、ブート時に最後の再起動がカーネルパニックによるものか、クリーンな再起動によるものかどうかを確実に確認する方法はありますか?
以下を使用して意図的にカーネルパニックを引き起こす場合、特にsyslogs
これに依存できないようです。kern.log
echo c > /proc/sysrq-triger
次回の起動時にカーネルパニックダンプはsyslogs
ありません。kern.log.*
last -x
また、最後の再起動がクリーンではなかったというヒントを得るために出力を読み取ってみましたが、ログインセッションが完全に終了していない場合にのみ表示されますcrash
。pts
組み込みシステムは、SSHやシリアルを使用する手動インタラクションなしで実行されており、ログインしているユーザーがいないため、これに依存することはできません。
また、注:私が使用している組み込みBSPはこれをサポートしていないので、ramoops-pstore
私には機能しません。
答え1
カーネルのクラッシュ後にカーネルが安定して機能しないため、ログに情報が書き込まれません(ファイルシステム構造が破損している可能性があり、ディスクに書き込むと状況が悪化する可能性があります)。
したがって、ログ内のカーネルパニックエントリを確認するのではなく、完全にシャットダウンまたは再起動するたびにログにメッセージを書き込むコードを反対の方法で追加できます。このコードを追加する場所は、使用している初期化システムによって異なります。
その後、起動時にメッセージを確認できます。現在のブートに関連するエントリの前に見つかった場合、シャットダウン/リブートはカーネルパニックによるものではないことがわかります。