Come convertire il formato orario 'dmesg' nel formato orario 'reale'


42

Ho (ad esempio) questa voce di registro dmesgnell'output:

[600711.395348] do_trap: 6 callbacks suppressed

Esiste la possibilità di convertire questo tempo "dmesg" in tempo "reale" per sapere quando questo evento accadrà?

Risposte:


59

Sembra che sia stato implementato di recente per Quantal (12.10): vedi http://brainstorm.ubuntu.com/idea/17829/ .

Fondamentalmente, dmesgè segnalato per avere un nuovo switch -T, --ctime.


Modificare. Come ulteriore estensione della risposta di Ignacio, ecco alcuni script per migliorare l'output di dmesg su sistemi più vecchi.

(Nota: per la versione Python del codice mostrato lì, si vorrà sostituire &lt;e &gt;tornare <>a renderlo nuovamente utilizzabile.)


Infine, per un singolo valore come 600711.395348si potrebbe fare

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

e ottieni la data e l'ora dell'evento.

(Si noti che a causa di errori di arrotondamento l'ultima seconda cifra probabilmente non sarà accurata.).

Modifica (2) : Notare che - come indicato nel commento di Womble di seguito - funzionerà solo se la macchina non è stata ibernata, ecc. (In tal caso, è meglio guardare le syslogconfigurazioni /etc/*syslog*e controllare i file appropriati. Vedi anche : dmesg vs / var / messages .)


4
E, come ulteriore vantaggio, se la macchina è mai stata sospesa, sei completamente condannato, perché il tempo trascorso a dormire non viene considerato.
womble

Il commento di Womble è super importante! Mostrerà l'ora sbagliata se si utilizza un laptop in letargo o in standby. Dovresti usare il file /var/log/kern.log per vedere il file attuale.
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,

Nota: non posso più modificare il mio commento, ma invece %Zche dovrebbe essere UTC, poiché date +%srestituisce secondi dall'UTC. Dovrebbe quindi essere convertito nel fuso orario locale.
kgibm,

1
@kgibm: sono d'accordo con (2); per quanto riguarda (1), non è che io abbia qualcosa contro una riga, ma in realtà non vedo un punto qui: il codice sopra è intenzionalmente diviso in tre righe per leggibilità (ho bisogno che le persone capiscano come funziona, non lo rende il più compatto possibile; per questo, lo costruirò meglio in sequenza) e dimensioni (mi piacerebbe avere nomi di variabili più lunghi, ma ciò rende la linea 3 un aspetto da incubo); d'altra parte, probabilmente non dovrai digitare l'intera linea lunga in un terminale, ma piuttosto metterlo in un file e renderlo eseguibile, quindi nessuna grande vittoria neanche qui.
ジ ョ ー ジ

17

Per estendere la risposta di Ignacio, le voci contenute in dmesgsono in genere registrate anche altrove nel sistema, tramite syslog, che ti darà un timestamp "reale". A meno che Ubuntu non abbia modificato l'impostazione predefinita di Debian, le voci di registro dovrebbero essere presenti /var/log/kern.log.


1
Su Cent OS 5 e 6, la voce di registro è in / var / log / messages.
emerino,

11

Il tempo indicato in dmesg è in secondi dall'avvio del kernel. Quindi, basta aggiungere molti secondi a quando il kernel ha iniziato a funzionare (suggerimento: uptime).


1
Funzionerà solo se stai usando un sistema che non va mai in standby. Altrimenti è necessario utilizzare i registri.
Oligofren,

2

Su busybox, il 3 righe sopra non ha funzionato, quindi ecco il mio modo di calcolarlo una volta (sostituirlo 1628880.0con il dmesgtimestamp):

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

So che questo è ormai vecchio ma dmesg ora ha un'opzione incorporata in -e o --reatime per visualizzare l'ora nell'ora locale.

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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.