Solución 1:
dmesg
lee el búfer de anillo de registro del kernel. No hace marcas de tiempo. Lo que debe hacer es configurar syslog para tomar los registros del kernel de ese búfer y enviarlos a un archivo (si aún no está configurado para hacerlo). Tenga en cuenta que la configuración predeterminada de syslog de CentOS 5.x envía los registros del kernel a /var/log/messages
, según recuerdo.
Si desea enviar todos los registros del kernel (dmesg) a /var/log/kern.log
, utilizando el demonio syslog predeterminado, agregaría una línea como la siguiente a /etc/syslog.conf
kern.* /var/log/kern.log
Solución 2:
Hay una solución "Habilitación de marcas de tiempo para dmesg/Kernel Ring Buffer"
Podrías agregar:
printk.time=1
a la línea de comandos del núcleo.
En cuanto a mí, he añadido a rc.local en todas las máquinas con marionetas. Es más fácil para mí) :
if test -f /sys/module/printk/parameters/time; then
echo 1 > /sys/module/printk/parameters/time
fi
Solución 3:
He escrito este simple script. Sí, es lento. Si quiere algo más rápido, puede escribir un script en perl, python o algo más. Estoy seguro de que esta secuencia de comandos simple puede ayudarlo a comprender cómo se puede calcular.
Tenga en cuenta que ignoré la fracción de segundos registrada en cada línea (después de . en la marca de tiempo).
#!/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
Espero que ayude. :)