Linux Centos с меткой времени dmesg

Когда Вы идете многопользовательские, другой раздел смонтирован или автосмонтирован сверху / домой. Что-либо в / корневом каталоге Вашего корневого раздела недоступно, когда многопользовательский.

/ домой имеет два различных дисковых каталога, смонтированные на двух различных уровнях выполнения; нет никакой причины для них иметь любую корреляцию друг другу.

15
задан 30 March 2012 в 19:56
6 ответов

dmesg читает кольцевой буфер журнала ядра. Он не делает отметок времени. Что вам нужно сделать, так это настроить syslog на захват журналов ядра из этого буфера и отправку их в файл (если он еще не настроен для этого). Обратите внимание, что конфигурация системного журнала CentOS 5.x по умолчанию отправляет журналы ядра в / var / log / messages , насколько я помню.

Если вы хотите отправить все журналы ядра (dmesg) в /var/log/kern.log, используя демон syslog по умолчанию, вы должны добавить следующую строку в /etc/syslog.conf

kern.*                         /var/log/kern.log
12
ответ дан 2 December 2019 в 20:51

Я написал этот простой сценарий. Да, это медленно. Если вам нужно что-то более быстрое, вы можете написать сценарий на perl, python или на чем-то еще. Я уверен, что этот простой сценарий может дать вам представление о том, как это можно вычислить.

Обратите внимание, я проигнорировал долю секунд, зарегистрированную в каждой строке (после. В метке времени).

#!/bin/bash
localtime() {
 perl -e "print(localtime($1).\"\n\");";
}

upnow="$(cut -f1 -d"." /proc/uptime)"
upmmt="$(( $(date +%s) - ${upnow} ))"

dmesg | while read line; do
 timestamp="$(echo "${line}" | sed "s/^\[ *\([0-9]\+\).*/\1/g")"
 timestamp=$(( ${timestamp} + ${upmmt} ))
 echo "${line}" | sed "s/^[^]]\+]\(.*\)/$(localtime "${timestamp}") -\1/g"
done

Надеюсь, это поможет. :)

1
ответ дан 2 December 2019 в 20:51

Есть решение «Включение меток времени для dmesg / кольцевого буфера ядра»

Вы можете добавить:

printk.time=1

в командную строку ядра.

Что касается меня, я добавил в rc. локальный на всех машинах с марионеткой. Мне так проще):

if test -f /sys/module/printk/parameters/time; then
   echo 1 > /sys/module/printk/parameters/time
fi
8
ответ дан 2 December 2019 в 20:51

Немного скрипта на perl, как показано ниже. Это общий способ, и я не автор.

dmesg|perl -ne 'BEGIN{$a= time()- qx!cat /proc/uptime!};s/(\d+)\.\d+/localtime($1 + $a)/e; print $_;'
  • perl -n - это способ чтения стандартного входа и считывания в переменную $_.
  • Тело (не секция BEGIN) затем запускается один раз для каждой строки.
  • BEGIN запускает код в {} один раз.
  • $a - это начало dmesg с эпохи
  • Команда s/... принимает значение в $_ и заменяет часть метки времени #####.###### версией смещения dmesg по "локальному времени" ( $1), добавленной в системное время запуска ($a)
  • Печать $a печатает dmesg с дружественной для локали меткой времени, замененной на метку времени "секунды с момента загрузки".
-1
ответ дан 2 December 2019 в 20:51

Изменение сценария в случае, если строка не начинается с "["

#!/bin/bash
localtime() {
 perl -e "print(localtime($1).\"\n\");";
}

upnow=$(cut -f1 -d"." /proc/uptime)
upmmt=$(( $(date +%s) - ${upnow} ))

dmesg \
| while read LINE; do
    if [ "$(echo ${LINE} | egrep -v "^\[")" == "" ] ; then
        timestamp=$(echo "${LINE}" | sed "s/^\[ *\([0-9]\+\).*/\1/g")
        timestamp=$(( ${timestamp} + ${upmmt} ))
        echo "${LINE}" | sed "s/^[^]]\+]\(.*\)/$(localtime "${timestamp}") -\1/g"
    else
        echo "${LINE}"
    fi
done
0
ответ дан 2 December 2019 в 20:51

Это обновление предложения Plutoid об удалении начальных пробелов из метки времени.

dmesg|perl -ne 'BEGIN{$a= time()- qx!cat /proc/uptime!};s/( *)(\d+)\.\d+/localtime($2 + $a)/e; print $_;' 
  • perl -n - это способ чтения стандартного ввода и считывания в переменную $ _.
  • тело (а не раздел BEGIN) затем запускается один раз для каждой строки.
  • BEGIN запускает код в {} один раз.
  • $ a - начало dmesg с эпохи (секунды)
  • s /. .. команда принимает значение в $ _ и заменяет \ s * #####. ###### часть метки времени версией "localtime" смещения dmesg ($ 1), добавленной к системному времени запуска ($ a)
  • print $ a печатает dmesg с меткой времени, удобной для локали, замененной меткой времени «секунды с момента загрузки».
0
ответ дан 2 December 2019 в 20:51

Теги

Похожие вопросы