/var/log/messages
,/var/log/syslog
和其他一些日志文件使用包含绝对时间的时间戳,例如Jan 13 14:13:10
。
/var/log/Xorg.0.log
和/var/log/dmesg
以及输出一样$ dmesg
,使用的格式类似于
[50595.991610] malkovich: malkovich malkovich malkovich malkovich
我猜/收集的数字代表自启动以来的秒和微秒。
但是,我尝试将这两组时间戳关联起来(使用的输出uptime
)产生了大约5000秒的差异。
这大约是我的计算机被暂停的时间。
有没有简便的方法可以将dmesg和Xorg使用的数字时间戳映射到绝对时间戳?
更新
为了弄清楚这个问题的初步步骤,并希望使我的问题更加清楚,我编写了一个Python脚本来解析/var/log/syslog
和输出时间偏差。在运行ubuntu 10.10的计算机上,该文件包含许多内核起源的行,这些行都标记了dmesg时间戳和syslog时间戳。该脚本为该文件中包含内核时间戳的每一行输出一行。
用法:
python syslogdriver.py /var/log/syslog | column -nts $'\t'
输出增加(请参阅下面的列定义):
abs abs_since_boot rel_time rel_offset message
Jan 13 07:49:15 32842.1276569 32842.301498 0 malkovich malkovich
... rel_offset
为0,所有介入的行...
Jan 13 09:55:14 40401.1276569 40401.306386 0 PM: Syncing filesystems ... done.
Jan 13 09:55:14 40401.1276569 40401.347469 0 PM: Preparing system for mem sleep
Jan 13 11:23:21 45688.1276569 40402.128198 -5280 Skipping EDID probe due to cached edid
Jan 13 11:23:21 45688.1276569 40402.729152 -5280 Freezing user space processes ... (elapsed 0.03 seconds) done.
Jan 13 11:23:21 45688.1276569 40402.760110 -5280 Freezing remaining freezable tasks ... (elapsed 0.01 seconds) done.
Jan 13 11:23:21 45688.1276569 40402.776102 -5280 PM: Entering mem sleep
... rel_offset
对于所有其余行是-5280 ...
Jan 13 11:23:21 45688.1276569 40403.149074 -5280 ACPI: Preparing to enter system sleep state S3
Jan 13 11:23:21 45688.1276569 40403.149477 -5280 PM: Saving platform NVS memory
Jan 13 11:23:21 45688.1276569 40403.149495 -5280 Disabling non-boot CPUs ...
Jan 13 11:23:21 45688.1276569 40403.149495 -5280 Back to C!
Jan 13 11:23:21 45688.1276569 40403.149495 -5280 PM: Restoring platform NVS memory
Jan 13 11:23:21 45688.1276569 40403.151034 -5280 ACPI: Waking up from system sleep state S3
...最后几行从下到下,仍远高于输出的末尾。 其中一些可能是在dmesg
发生挂起之前写入了的循环缓冲区,并仅在syslog
之后传播。这就解释了为什么它们都具有相同的syslog时间戳。
列定义:
abs
是syslog记录的时间。
abs_since_boot
是自系统启动以来以秒为单位的相同时间,基于的内容/proc/uptime
和的值time.time()
。
rel_time
是内核时间戳。
rel_offset
abs_since_boot
和之间的区别是rel_time
。我将其舍入为数十秒,以避免由于绝对(即syslog
-生成)时间戳仅具有秒精度而导致的一次性错误。这实际上不是正确的方法,因为它确实(我认为..)只会导致产生小于10的错误的机会较小。如果有人有更好的主意,请告诉我。
我也对syslog的日期格式有一些疑问。特别是,我想知道是否有一年。我猜不是,在任何情况下都可能会帮助自己解决TFM中的信息,但是如果有人碰巧知道它会很有用。..当然,假设有人在将来的某个时候使用此脚本,而不是仅仅破坏了几行Perl代码。
下一个:
因此,除非你们中的一个给予我一些可喜的启示,否则我的下一步将是添加一个函数,以获取给定内核时间戳的时间偏差。我应该能够将一个或一组syslog以及内核时间戳一起提供给脚本,以获得绝对时间戳。然后,我可以重新调试我的Xorg问题,此问题目前已解决。
Freezing user space processes
因为在睡眠之前显然已经完成了这些值。
[12345.6789]..
内核发出的文本(以开头)的前缀,因此它可以正确地执行操作,但要以我上次评论所解决的问题为准。我不确定内核在这里到底应该做什么?这取决于那些相对于启动的时间戳意味着什么。 在某些情况下,运行时间(而不是自启动以来的时间)可能很有意义。我想理想情况下,这两个值都会有可靠的记录。
sort
,具有年份,时区等。python脚本为+1。