我(例如)在dmesg
输出中有此日志条目:
[600711.395348] do_trap: 6 callbacks suppressed
是否有可能将这个“dmesg”时间转换为“真实”时间以了解此事件发生的时间?
答案1
它看起来好像是最近为 Quantal (12.10) 实现的:参见http://brainstorm.ubuntu.com/idea/17829/。
基本上,dmesg
据报道有一个新的开关-T, --ctime
。
编辑。作为 Ignacio 答案的另一个扩展,这里有一些脚本可以增强旧系统上的 dmesg 输出。
(注意:对于那里显示的 Python 版本的代码,需要替换<
并>
返回才能<>
使其再次可用。)
最后,对于单个值,600711.395348
可以这样做
ut=`cut -d' ' -f1 </proc/uptime`
ts=`date +%s`
date -d"70-1-1 + $ts sec - $ut sec + $(date +%:::z) hour + 600711.395348 sec" +"%F %T"
并获取当地时区的事件日期和时间。
(请注意,由于舍入误差,最后一位数字可能不准确。)
编辑(2):请注意 - 根据 Womble 在下面的评论 - 这仅在机器未处于休眠状态等情况下才会起作用。(在这种情况下,最好查看syslog
配置/etc/*syslog*
并检查相应的文件。另请参阅:dmesg 与 /var/messages。 )
答案2
扩展 Ignacio 的回答, 中包含的条目dmesg
通常也会通过 syslog 记录在系统的其他地方,这将为您提供“真实”时间戳。除非 Ubuntu 更改了 Debian 设置的默认值,否则日志条目应该在 中/var/log/kern.log
。
答案3
dmesg 中给出的时间以内核启动后的秒数为单位。因此,只需将内核开始运行的时间(提示:正常运行时间)加上该秒数即可。
答案4
在 busybox 上,上面的 3 条命令不起作用,因此我采用以下方法来一次性计算(1628880.0
用您的dmesg
时间戳替换):
perl -e '@a=split(`/proc/uptime`);print scalar(localtime(time()+$a[0] - 1628880.0)."\n");'