Як конвертувати формат часу "dmesg" у формат "реального" часу


42

Я маю (наприклад) цей запис у журналі у dmesgвиході:

[600711.395348] do_trap: 6 callbacks suppressed

Чи є можливість перетворити цей "dmesg" час на "реальний" час, щоб знати, коли ця подія відбудеться?

Відповіді:


59

Схоже, це було нещодавно реалізовано для Quantal (12.10): див. Http://brainstorm.ubuntu.com/idea/17829/ .

В основному, dmesgяк повідомляється, є новий перемикач -T, --ctime.


Редагувати. Як ще одне розширення на відповідь Ігнасіо, ось кілька сценаріїв для покращення виводу dmesg для старих систем.

(Примітка. Для пітонової версії коду, показаного там, потрібно буде замінити &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) : Зверніть увагу, що - відповідно до коментаря Womble, наведеного нижче, - це буде працювати лише в тому випадку, якщо машина не була в сплячому режимі і т. Д. (У цьому випадку краще переглянути syslogконфігурації /etc/*syslog*та перевірити відповідні файли. Див. Також : dmesg vs / var / messages .)


4
І, як додатковий бонус, якщо машина коли-небудь зупинена, ви повністю приречені, тому що витрачений час засинання не враховується.
жіноча

Коментар Womble - це супер імпортерно! Він покаже неправильний час, якщо ви використовуєте ноутбук, який перебуває в сплячому режимі або встановлений у режимі очікування. Ви повинні використовувати /var/log/kern.log файл, щоб переглянути фактичний файл.
олігофрен

date -d"1970-01-01 + $(date +%s) sec - $(cut -d' ' -f1 </proc/uptime) sec + 600711.395348 sec" +"%F %T.%N %Z"
Однолінійний

Примітка. Я більше не можу редагувати свій коментар, але замість цього %Zвін повинен бути UTC, оскільки date +%sповертається секунди з UTC. Потім його потрібно було б перетворити на місцевий часовий пояс.
kgibm

1
@kgibm: я згоден (2); що стосується (1), то це не те, що я маю що-небудь проти однолінійки - але я тут насправді не бачу сенсу: код вище навмисно розбивається на три рядки для читабельності (мені потрібні люди, щоб зрозуміти, як це працює, не робить його максимально компактним; для цього я краще буду його послідовно створювати) та розміру (я хотів би мати довші назви змінних, але це робить рядок 3 виглядом кошмару-іш); з іншого боку, ви, ймовірно, не будете набирати весь довгий рядок у терміналі, а скоріше помістіть його у файл та зробіть виконуваний файл - тому тут також не буде великої виграші.
ジ ョ ー ジ

17

Щоб продовжити відповідь Ігнасіо, записи, що містяться в dmesg, як правило, також реєструються в іншому місці системи, через syslog, що дасть вам "реальну" мітку часу. Якщо Ubuntu не змінив налаштування Debian за замовчуванням, записи журналу повинні бути ввімкненими /var/log/kern.log.


1
У Cent OS 5 і 6 запис журналу знаходиться в / var / log / messages.
emerino

11

Час, вказаний у dmesg, становить секунди з моменту запуску ядра. Отже, просто додайте стільки секунд до того, коли ядро ​​почало працювати (підказка: uptime).


1
Це буде працювати лише в тому випадку, якщо ви використовуєте систему, яка ніколи не переходить у режим очікування. В іншому випадку потрібно використовувати журнали.
олігофрен

2

На BusyBox, 3 вкладиша вище не працює, так ось мій спосіб обчислити це одноразовий (замінити 1628880.0з dmesgвідміткою часу):

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


2

Я знаю, що це зараз старе, але тепер у 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.