Я пытаюсь понять временную метку dmesg, и мне трудно преобразовать ее, чтобы изменить ее на дату Java / пользовательский формат даты.
Любая помощь очень ценится.
Пример журнала dmesg:
[14614.647880] airo(eth1): link lost (missed beacons)
Спасибо!
dmesg
из-util-linux 2.20.1
под Ubuntu 13.04)rpm -qf /bin/dmesg => util-linux-2.13-0.56.0.2.el5
util-linux 2.20
, согласно примечаниям к выпуску: ftp.kernel.org/pub/linux/utils/util-linux/v2.20/…С помощью dr answer я написал обходной путь, благодаря которому преобразование помещается в ваш .bashrc. Это ничего не сломает, если у вас нет метки времени или уже правильные метки времени.
Кроме того, хорошее чтение о логике преобразования меток времени dmesg и о том, как включить метки времени, когда их нет: https://supportcenter.checkpoint.com/supportcenter/portal?eventSubmit_doGoviewsolutiondetails=&solutionid=sk92677
источник
local dmesg_bin=$(type -a dmesg | awk 'END { print $NF }')
type
overwhich
, см. Этот вопрос . Я отредактировал свой ответ, чтобы избежать бесполезной тройной трубы.Для систем без «dmesg -T», таких как RHEL / CentOS 6, мне понравилась функция «dmesg_with_human_timestamps», предоставленная ранее lucas-cimon . Однако у него есть проблемы с некоторыми из наших боксов с большим временем безотказной работы. Оказывается, временные метки ядра в dmesg выводятся из значения времени безотказной работы, сохраняемого отдельными процессорами. Со временем это перестает синхронизироваться с часами реального времени. В результате наиболее точное преобразование для последних записей dmesg будет основываться на тактовой частоте ЦП, а не на / proc / uptime. Например, в конкретном окне CentOS 6.6 здесь:
Учитывая, что время безотказной работы процессора выражается в миллисекундах, здесь есть смещение почти на 5 1/2 часов. Поэтому я изменил сценарий и преобразовал его в собственный bash в процессе:
источник
Поэтому KevZero запросил менее сложное решение, поэтому я придумал следующее:
Вот пример:
Если вы хотите, чтобы он работал немного лучше, вместо этого поместите метку времени из proc в переменную :)
источник
В последних версиях dmesg вы можете просто позвонить
dmesg -T
.источник
Если у вас нет
-T
возможности,dmesg
например, на Andoid, вы можете использоватьbusybox
версию. Следующее решает также некоторые другие проблемы:[0.0000]
Формат предшествует то , что выглядит как неуместная информация о цвете, префиксы<6>
.Он вдохновлен этим сообщением в блоге .
Обратите внимание, однако, что эта реализация довольно медленная.
источник
вам нужно будет сослаться на "btime" в / proc / stat, которое представляет собой эпоху Unix, когда система была загружена в последний раз. Затем вы можете основываться на этом времени загрузки системы, а затем прибавлять прошедшие секунды, указанные в dmesg, для расчета отметки времени для каждого события.
источник
В более старых дистрибутивах Linux еще одним вариантом является использование сценария обертывания, например, на Perl или Python.
Смотрите решения здесь:
http://linuxaria.com/article/how-to-make-dmesg-timestamp-human-readable?lang=en http://jmorano.moretrix.com/2012/03/dmesg-human-readable-timestamps/
источник