У меня есть (например) эта запись в журнале dmesg
вывод:
[600711.395348] do_trap: 6 callbacks suppressed
Есть ли возможность преобразовать это время «dmesg» в «реальное» время, чтобы знать, когда это событие произошло?
Похоже, что это было недавно реализовано для Quantal (12.10): см. http://brainstorm.ubuntu.com/idea/17829/ .
В принципе, dmesg
Сообщается, что есть новый переключатель -T, --ctime
.
Редактировать. Как еще одно расширение ответа Игнасио, Вот несколько скриптов для улучшения вывода dmesg в старых системах.
(Примечание: для версии кода, показанной там на Python, нужно заменить <
и >
вернуться к <>
чтобы снова сделать его пригодным для использования. )
Наконец, для одного значения вроде 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'