web-dev-qa-db-ja.com

「dmesg」時間形式を「実際の」時間形式に変換する方法

(たとえば)dmesg出力に次のログエントリがあります。

[600711.395348] do_trap: 6 callbacks suppressed

このイベントが発生したときに、この「dmesg」時間を「実際の」知る時間に変換する可能性はありますか?

43
Jan Marek

Quantal(12.10)に最近実装されたかのように見えます。詳細は http://brainstorm.ubuntu.com/idea/17829/ を参照してください。

基本的に、dmesgには新しいスイッチがあると報告されています-T, --ctime


編集。Ignacioの回答の別の拡張として、 ここ は、古いシステムでdmesg出力を拡張するためのスクリプトです。

(注:pythonそこに示されているコードのバージョンの場合、&lt;および&gt; 戻る <>再び使用できるようにします。 )


最後に、600711.395348できる

ut=`cut -d' ' -f1 </proc/uptime` 
ts=`date +%s` 
date -d"70-1-1 + $ts sec - $ut sec + 600711.395348 sec" +"%F %T"

イベントの日時を取得します。

(丸め誤差のため、最後の2桁目はおそらく正確ではないことに注意してください。).

Edit(2):以下のWombleのコメントに従って、これはマシンが休止状態になっていない場合にのみ機能することに注意してください。その場合、syslog configsを/etc/*syslog*と適切なファイルを確認します。参照: dmesg vs/var/messages 。 )

61
ジョージ

イグナシオの答えを拡張するために、dmesgに含まれるエントリは、通常、syslogを介してシステムの他の場所にも記録されます。これにより、「実際の」タイムスタンプが得られます。 UbuntuがDebianセットのデフォルトを変更していない限り、ログエントリは/var/log/kern.log

17
womble

Dmesgで指定される時間は、カーネルの起動からの秒数です。したがって、カーネルが実行を開始するまでの秒数を追加するだけです(ヒント:稼働時間)。

私はこれが古いことを知っていますが、dmesgにはローカル時間で時刻を表示する組み込みの-eまたは--reatimeオプションがあります。

root@bbs:/var/log# dmesg|tail -1
[50755952.379177] Out of memory in UB 1593: OOM killed process 3183 (sbbs) score 0 vm:747204kB, rss:242764kB, swap:88224kB

root@bbs:/var/log# dmesg -e|tail -1
[Feb20 17:10] Out of memory in UB 1593: OOM killed process 3183 (sbbs) score 0 vm:747204kB, rss:242764kB, swap:88224kB
3
nelgin

Busyboxでは、上記の3つのライナーが機能しなかったため、これを1回計算する方法を次に示します(1628880.0dmesgタイムスタンプに置き換えます)。

Perl -e '@a=split(`/proc/uptime`);print scalar(localtime(time()+$a[0] - 1628880.0)."\n");'
2
Mark Lakata

dmesg | Perl -pe 'use Unix::Uptime; s/^\[(.*)\]/localtime(time()-Unix::Uptime->uptime()+$1)/e'

2
Stone