Я надеюсь, что есть кто-то, кто может помочь мне с этой странной проблемой.
Я думаю, что я знаю, почему это происходит, но я не знаю, как это решить. Может быть, это потому, что время BIOS не установлено правильно или что-то вроде этого. Но я не хочу менять время BIOS около 400+ серверов. (Или сменить Бит Батт)
root@spool:~# echo TEST > /dev/kmsg
root@spool:~# dmesg -T | tail -1
[Mon Feb 17 04:57:03 2014] TEST
root@spool:~# date
Mon Feb 17 11:45:17 CET 2014
Сервер работает NTP для синхронизации времени.
Кто-нибудь здесь, кто знает, как решить эту проблему в ОС?
Linux spool 3.2.0-4-amd64 #1 SMP Debian 3.2.46-1+deb7u1 x86_64 GNU/Linux
Почему при отражении /dev/kmsg
дата / время моего сообщения dmesg
не синхронизируется с системной датой / временем?
/etc/localtime
правильный?syslog
Время получить от МестноеВремя.journalctl -k
сейчас (в системах с journald) именно из-за этого. Это включает в себя правильное время, в моем часовом поясе.Ответы:
Чтобы проверить свою теорию (что, кстати, звучит правдоподобно), выполните от имени root следующее:
Это покажет вам ваши аппаратные часы на сервере, на котором вы выполняете команду.
Чтобы синхронизировать ваши аппаратные часы с системным временем (которое управляется ntp), выполните следующую команду:
Последний аргумент (--utc) указывает hwclock сохранять время в аппаратных часах в согласованном универсальном времени.
Кроме того, имейте в виду, что на странице man для dmesg (1) сказано следующее, поэтому поведение, которое вы испытываете, задокументировано и допустимо:
источник
root@spool:~# hwclock --show
Mon Feb 17 20:30:14 2014 -0.985068 seconds
root@spool:~# hwclock --systohc --utc
root@spool:~# echo TEST > /dev/kmsg
root@spool:~# dmesg -T | tail -1
[Mon Feb 17 13:50:14 2014] TEST
root@spool:~# date
Mon Feb 17 20:30:46 CET 2014
dmesg просто печатает кольцевой буфер ядра, который регистрирует сообщения с временем безотказной работы в течение нескольких секунд после запуска в качестве метки времени.
Поэтому, если вы используете опцию -T, все эти значения времени безотказной работы просто добавляются к дате загрузки вашей системы. Если вы спали в режиме ожидания или возобновления, они теряются, поэтому в этом случае опция -T не нужна, поскольку значения даты / времени не верны и возвращаются в прошлое.
источник
Чтобы получить точное время для «недавних» записей
dmesg
, вы можете преобразовать метки времени dmesg в реальное время с некоторым взломом вывода.Под «недавним» я подразумеваю времена после последнего приостановления / возобновления, поскольку (как уже отмечалось другими) время приостановки не учитывается в метке времени dmesg.
Но если вам это нужно часто, как в ноутбуке, вы можете поместить что-то вроде следующего в функции или псевдонимы:
Пример вывода:
По сравнению с исходным
dmesg
выходом (который отключен на 3 дня):источник
dmesg
строку с обновленным регулярным выражением.