我们遇到了一个奇怪的问题。我们使用 perl 脚本在 dmesg 中获取人类可读的时间戳(取自http://linuxaria.com/article/how-to-make-dmesg-timestamp-human-readable)我也试过这个(http://jmorano.moretrix.com/2012/03/dmesg-human-readable-timestamps/)
但记录的时间与系统时间有很大差异,在某些服务器上甚至相差一年:
(我们使用 RHEL 5.8,所以 dmesg -T 这里不是一个选项)
例如:DB1:
[root@dbXX ~]# echo "Test dmesg message" > /dev/kmsg
[root@dbXX ~]# /opt/ns/scripts/dmesg | tail -10
[2015-01-17 07:23:09] kjournald starting. Commit interval 5 seconds
[2015-01-17 07:23:09] EXT3 FS on cciss/c0d1p1, internal journal
[2015-01-17 07:23:09] EXT3-fs: mounted filesystem with ordered data mode.
[2015-01-20 05:54:18] kjournald starting. Commit interval 5 seconds
[2015-01-20 05:54:18] EXT3 FS on cciss/c0d1p1, internal journal
[2015-01-20 05:54:18] EXT3-fs: mounted filesystem with ordered data mode.
[2015-01-20 06:19:19] kjournald starting. Commit interval 5 seconds
[2015-01-20 06:19:19] EXT3 FS on cciss/c0d1p1, internal journal
[2015-01-20 06:19:19] EXT3-fs: mounted filesystem with ordered data mode.
[2014-09-23 10:28:35] Test dmesg message
[root@dbXX ~]# date
Mon Apr 20 06:22:44 PDT 2015
[root@dbXX ~]# hwclock --show
Mon 20 Apr 2015 06:22:56 AM PDT -0.790126 seconds
DB2:
[root@dbXXYY ~]# echo "Test dmesg message" > /dev/kmsg
[root@dbXXYY ~]# /opt/ns/scripts/dmesg | tail -10
[2014-01-27 04:43:46] [<ffffffff8002cafd>] mntput_no_expire+0x19/0x89
[2014-01-27 04:43:46] [<ffffffff80063c63>] __mutex_lock_slowpath+0x60/0x9b
[2014-01-27 04:43:46] [<ffffffff8002380c>] __path_lookup_intent_open+0x56/0x97
[2014-01-27 04:43:46] [<ffffffff80063cad>] .text.lock.mutex+0xf/0x14
[2014-01-27 04:43:46] [<ffffffff8001b15e>] open_namei+0xea/0x6ba
[2014-01-27 04:43:46] [<ffffffff800275c8>] do_filp_open+0x1c/0x38
[2014-01-27 04:43:46] [<ffffffff80019f9a>] do_sys_open+0x44/0xbe
[2014-01-27 04:43:46] [<ffffffff8005d116>] system_call+0x7e/0x83
[2014-01-27 04:43:46]
[2014-02-28 10:27:28] Test dmesg message
[root@dbXXYY ~]# date
Mon Apr 20 06:24:13 PDT 2015
[root@dbXXYY ~]# hwclock --show
Mon 20 Apr 2015 05:24:17 AM PDT -0.344776 seconds
DB3:
[root@dbYY ~]# echo "Test dmesg message" > /dev/kmsg
[root@dbYY ~]# /opt/ns/scripts/dmesg | tail -10
[2015-01-12 01:04:45]
[2015-02-02 11:11:44] request_module: runaway loop modprobe net-pf-10
[2015-02-02 11:11:44] request_module: runaway loop modprobe net-pf-10
[2015-02-02 11:11:44] request_module: runaway loop modprobe net-pf-10
[2015-02-02 11:11:44] request_module: runaway loop modprobe net-pf-10
[2015-02-02 11:11:44] request_module: runaway loop modprobe net-pf-10
[2015-04-20 02:28:30] Test dmesg message
[root@dbYY ~]# date
Mon Apr 20 06:16:08 PDT 2015
[root@dbYY ~]# hwclock --show
Mon 20 Apr 2015 05:16:58 AM PDT -0.634708 seconds
知道如何纠正吗?提前致谢
答案1
尝试“journalctl -k”而不是“dmesg”
答案2
最近,我租了一个云 VPS。当我登录时,日期是格林威治标准时间 (GMT)。我将其更改为 CDT,即 UTC-5:00。我很快意识到,尽管 date 命令确实输出了正确的时间和日期,但 syslogd 控制的日志却偏离了 5 个小时。它们仍在使用格林威治标准时间 (GMT)。我当时没有做任何事情,因为我不需要精确的时间/日期记录,而且我知道重新启动可能会解决这个问题,但我无法立即执行此操作,因为它是一台生产服务器。
为了对 VPS 进行完整备份,我安排了一次维护性关闭。重启后,syslogd 日志开始以正确的 CDT 时间记录。最重要的是,使用 date 命令确保您的服务器具有正确的时间/日期/时区,并尽快重启这些服务器。
顺便说一句,我认为 #date 时间/日期 和 #hwclock 时间/日期 之间相差一小时是由于夏令时时区变化造成的。看来硬件时钟时间确实改变了时区,但实际上并没有改变日期。