Bagaimana cara mengubah format waktu 'dmesg' ke format waktu 'nyata'

42

Saya punya (misalnya) entri log ini dalam dmesgoutput:

[600711.395348] do_trap: 6 callbacks suppressed

Apakah ada kemungkinan untuk mengubah waktu 'dmesg' ini menjadi 'real' untuk mengetahui, kapan acara ini terjadi?

Jan Marek
sumber

Jawaban:

59

Sepertinya baru-baru ini diterapkan untuk Quantal (12.10): lihat http://brainstorm.ubuntu.com/idea/17829/ .

Pada dasarnya, dmesgdilaporkan memiliki saklar baru -T, --ctime.


Edit. Sebagai ekstensi lain pada jawaban Ignacio, berikut adalah beberapa skrip untuk meningkatkan output dmesg pada sistem yang lebih lama.

(Catatan: untuk versi python dari kode yang ditampilkan di sana, seseorang akan ingin mengganti &lt;dan &gt;kembali agar <>dapat digunakan kembali.)


Akhirnya, untuk nilai tunggal seperti yang 600711.395348bisa dilakukan

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

dan dapatkan tanggal dan waktu acara.

(Harap dicatat bahwa karena kesalahan pembulatan, digit kedua terakhir mungkin tidak akan akurat.).

Sunting (2) : Harap dicatat bahwa - sesuai komentar Womble di bawah ini, - ini hanya akan berfungsi jika mesin tidak hibernasi dll. (Dalam hal ini, orang akan lebih baik melihat syslogkonfigurasi di /etc/*syslog*dan memeriksa file yang sesuai. Lihat juga : dmesg vs / var / messages .)

ジ ョ ー ジ
sumber
4
Dan, sebagai bonus tambahan, jika mesin ditunda, Anda benar-benar hancur, karena waktu yang dihabiskan untuk tidur tidak diperhitungkan.
womble
Komentar Womble sangat penting! Ini akan menunjukkan waktu yang salah jika menggunakan laptop yang berhibernasi atau diatur dalam keadaan siaga. Anda harus menggunakan file /var/log/kern.log untuk melihat file yang sebenarnya.
oligofren
One-liner:date -d"1970-01-01 + $(date +%s) sec - $(cut -d' ' -f1 </proc/uptime) sec + 600711.395348 sec" +"%F %T.%N %Z"
kgibm
Catatan: Saya tidak dapat lagi mengedit komentar saya, tetapi %Zseharusnya UTC, sejak date +%smengembalikan detik sejak UTC. Maka harus dikonversi ke zona waktu lokal.
kgibm
1
@ kgibm: Saya setuju dengan (2); seperti untuk (1), itu bukan karena saya memiliki sesuatu terhadap one-liners - tetapi saya tidak benar-benar melihat titik untuk itu di sini: kode di atas sengaja dibagi menjadi tiga baris untuk keterbacaan (saya perlu orang untuk memahami bagaimana hal itu terjadi) berfungsi, tidak membuatnya sekompak mungkin; untuk itu, saya akan lebih baik membangunnya secara berurutan) dan ukuran (saya ingin memiliki nama variabel yang lebih panjang, tetapi yang membuat baris 3 terlihat seperti mimpi buruk-ish); di sisi lain, Anda mungkin tidak akan mengetikkan seluruh baris panjang di terminal, tetapi memasukkannya ke dalam file dan membuat executable - jadi tidak ada kemenangan besar di sini juga.
ジ ョ ー ジ
17

Untuk memperluas jawaban Ignacio, entri yang terkandung di dalamnya dmesgbiasanya juga dicatat di sistem lain, melalui syslog, yang akan memberi Anda cap waktu "nyata". Kecuali Ubuntu telah mengubah default set-Debian, entri log harus dalam /var/log/kern.log.

womble
sumber
1
Pada Cent OS 5 dan 6, entri log ada di / var / log / messages.
emerino
11

Waktu yang diberikan dalam dmesg dalam detik sejak startup kernel. Jadi, tambahkan saja beberapa detik ketika kernel mulai berjalan (petunjuk: uptime).

Ignacio Vazquez-Abrams
sumber
1
Itu hanya akan berfungsi jika Anda menggunakan sistem yang tidak pernah masuk ke siaga. Kalau tidak, Anda harus menggunakan log.
oligofren
2

Di busybox, 3 liner di atas tidak berfungsi, jadi inilah cara saya menghitungnya (ganti 1628880.0dengan dmesgcap waktu Anda ):

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

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

Batu
sumber
2

Saya tahu ini sudah lama tetapi dmesg sekarang memiliki opsi built -e atau --reatime untuk menampilkan waktu dalam waktu lokal.

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
nelgin
sumber