Назад | Перейти на главную страницу

Как преобразовать формат времени dmesg в формат реального времени

У меня есть (например) эта запись в журнале dmesg вывод:

[600711.395348] do_trap: 6 callbacks suppressed

Есть ли возможность преобразовать это время «dmesg» в «реальное» время, чтобы знать, когда это событие произошло?

Похоже, что это было недавно реализовано для Quantal (12.10): см. http://brainstorm.ubuntu.com/idea/17829/ .

В принципе, dmesg Сообщается, что есть новый переключатель -T, --ctime.


Редактировать. Как еще одно расширение ответа Игнасио, Вот несколько скриптов для улучшения вывода 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): Обратите внимание, что - согласно комментарию Womble ниже - это будет работать только в том случае, если машина не была в гибернации и т. Д. (В этом случае лучше посмотреть на syslog конфиги на /etc/*syslog* и проверьте соответствующие файлы. Смотрите также: dmesg против / var / messages . )

Чтобы продолжить ответ Игнасио, записи, содержащиеся в dmesg обычно также регистрируются в другом месте системы через системный журнал, что дает вам «реальную» отметку времени. Если Ubuntu не изменил настройки Debian по умолчанию, записи журнала должны быть в /var/log/kern.log.

В 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

На busybox указанные выше 3 вкладыша не работали, поэтому вот мой способ рассчитать его однократно (заменить 1628880.0 с вашим dmesg отметка времени):

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

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