Estoy tratando de entender la marca de tiempo dmesg y me resulta difícil convertirla para cambiarla al formato de fecha java / fecha personalizada.
Cualquier ayuda es muy apreciada.
Ejemplo de registro dmesg:
[14614.647880] airo(eth1): link lost (missed beacons)
¡Gracias!
dmesg
desdeutil-linux 2.20.1
Ubuntu 13.04)rpm -qf /bin/dmesg => util-linux-2.13-0.56.0.2.el5
util-linux 2.20
, según las Notas de la versión: ftp.kernel.org/pub/linux/utils/util-linux/v2.20/…Con la ayuda de dr answer, escribí una solución alternativa que hace que la conversión se coloque en su .bashrc. No romperá nada si no tiene ninguna marca de tiempo o si ya tiene marcas de tiempo correctas.
Además, una buena lectura sobre la lógica de conversión de marca de tiempo dmesg y cómo habilitar marcas de tiempo cuando no hay ninguna: https://supportcenter.checkpoint.com/supportcenter/portal?eventSubmit_doGoviewsolutiondetails=&solutionid=sk92677
fuente
local dmesg_bin=$(type -a dmesg | awk 'END { print $NF }')
type
overwhich
, consulte esta pregunta . Sin embargo, edité mi respuesta para evitar el triple tubo inútil.Para sistemas sin "dmesg -T" como RHEL / CentOS 6, me gustó la función "dmesg_with_human_timestamps" proporcionada anteriormente por lucas-cimon . Sin embargo, tiene algunos problemas con algunas de nuestras cajas con un gran tiempo de actividad. Resulta que las marcas de tiempo del kernel en dmesg se derivan de un valor de tiempo de actividad mantenido por CPU individuales. Con el tiempo, esto se desincroniza con el reloj de tiempo real. Como resultado, la conversión más precisa para las entradas recientes de dmesg se basará en el reloj de la CPU en lugar de / proc / uptime. Por ejemplo, en una caja CentOS 6.6 en particular aquí:
Teniendo en cuenta que el tiempo de actividad de la CPU está en milisegundos, aquí hay una compensación de casi 5 1/2 horas. Así que revisé el script y lo convertí a bash nativo en el proceso:
fuente
Entonces KevZero solicitó una solución menos complicada, así que se me ocurrió lo siguiente:
He aquí un ejemplo:
Si desea que funcione un poco mejor, coloque la marca de tiempo de proc en una variable en su lugar :)
fuente
En versiones recientes de dmesg, puede simplemente llamar a
dmesg -T
.fuente
Si no tiene la
-T
opción paradmesg
, por ejemplo, en Andoid, puede usar labusybox
versión. Lo siguiente también resuelve algunos otros problemas:[0.0000]
formato está precedido por algo que parece información de color fuera de lugar, prefijos como<6>
.Está inspirado en esta publicación de blog .
Sin embargo, tenga en cuenta que esta implementación es bastante lenta.
fuente
necesitará hacer referencia a "btime" en / proc / stat, que es la época de Unix en la que el sistema se inició por última vez. Luego, puede basarse en el tiempo de arranque del sistema y luego agregar los segundos transcurridos dados en dmesg para calcular la marca de tiempo para cada evento.
fuente
Con las distribuciones de Linux más antiguas, otra opción es utilizar un script de ajuste, por ejemplo, en Perl o Python.
Vea las soluciones aquí:
http://linuxaria.com/article/how-to-make-dmesg-timestamp-human-readable?lang=en http://jmorano.moretrix.com/2012/03/dmesg-human-readable-timestamps/
fuente