У меня есть (например) эта запись журнала в dmesg
выводе:
[600711.395348] do_trap: 6 callbacks suppressed
Есть ли возможность преобразовать это время «dmesg» в «реальное» время, чтобы узнать, когда это событие произошло?
Это выглядит , как если бы он был реализовано в последнее время для квантового (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 vs / var / messages .)
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. Затем он должен быть преобразован в местный часовой пояс.Чтобы расширить ответ Игнасио, записи, содержащиеся в нем
dmesg
, также обычно регистрируются в другом месте системы через системный журнал, который даст вам «реальную» временную метку. Если Ubuntu не изменил установленный по умолчанию Debian, записи журнала должны быть в/var/log/kern.log
.источник
Время, указанное в dmesg, указывается в секундах с момента запуска ядра. Итак, просто добавьте столько секунд к моменту запуска ядра (подсказка: время безотказной работы).
источник
На busybox 3 лайнера выше не работали, так что вот мой способ рассчитать его один раз (замените
1628880.0
на вашуdmesg
временную метку):источник
dmesg | perl -pe 'use Unix::Uptime; s/^\[(.*)\]/localtime(time()-Unix::Uptime->uptime()+$1)/e'
источник
Я знаю, что он уже старый, но в dmesg теперь есть встроенная опция -e или --reatime для отображения времени по местному времени.
источник