エラーメッセージをリングバッファのdmesg出力に出力するデバイスドライバを書いています。 dmesg`の出力が変化するのを見たい。
どうすればいいでしょうか?
比較的最近の「dmesg」バージョンフォローオプションを提供( -w
、--follow
)は、 tail -f
と同様に機能します。
したがって、次のコマンドを使用します。
$ dmesg -wH
( -H
、--human
は、色、相対時間などのユーザーフレンドリーな機能を可能にします)。
これらのオプションは、たとえばFedora 19で利用できます。
カーネルのログメッセージを取得するには dmesg
を使う。
カーネル自体のログはリングバッファに記録される。
あとは dmesg
がリングバッファの内容を出力するだけである。
dmesg -c` を実行すると、リングバッファも削除される。
そのため、while true; do dmesg -c; sleep 1; done
のようにすると、dmesg|tail
と同等のことができる。しかし、これはリングバッファを削除するので、root権限が必要になる。
もう1つの方法は /proc/kmsg
ファイルでリングバッファを見ることだ。tail -f /proc/kmsg` を実行することもできるが、これは1つのプロセスに対してのみ許可される。- このデーモンの仕事は、メッセージを読み、それを実際のファイル(通常は/var/log)に書き込み、そこで読むことができるようにすることです。すべてのメッセージを1つのファイルに出力するように設定することも、異なる部分を異なるファイルに出力するように設定することもできます。(ただし、設定はシステムのロギング・デーモンに依存する)。
そのため、 /var/log
を見て、あなたのニーズに合ったファイルがあれば、それを使用し、そうでなければロギングデーモンを設定してください。
組み込みシステムを使用している場合、OpenWRTなどのシステムで一般的なビジーボックスは非常に限られた機能しかなく、サポートされているフラグは2〜3個のみです。
イベントが変化するにつれて画面にdmesg出力をすばやく汚れた方法で継続的に印刷したい場合は、単純なbashループで問題なく動作します。 それは理想的ではありませんが、先ほど述べたように、BusyBox dmesgには多くの機能がありません。 コマンドラインに入力すると、次の効果が同じであることがわかります。
$ while true; do dmesg -c ; sleep 1 ; done
Ctrl-Cでループを終了できます。 スリープ1は、CPUの不必要に打撃を与えるのを止めることです。-cフラグは、各通話のバッファーをクリアするため、毎秒繰り返し出力が表示されません。