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?

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 .)


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.


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).


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");'

2

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


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.