Solusi 1:
dmesg baru saja mencetak kernel ringbuffer yang mencatat pesan dengan waktu aktif dalam hitungan detik sejak dimulai sebagai stempel waktu.
Jadi jika Anda menggunakan opsi -T, semua nilai uptime ini baru saja ditambahkan ke tanggal sistem Anda di-boot. Jika Anda memiliki waktu tidur dalam penangguhan atau melanjutkan, mereka hilang, jadi dalam kasus ini opsi -T tidak berguna, karena nilai tanggal/waktu tidak tepat saat itu dan kembali ke masa lalu.
Solusi 2:
Untuk memverifikasi teori Anda (yang memang masuk akal), jalankan perintah berikut sebagai root:
hwclock --show
Ini akan menunjukkan kepada Anda jam perangkat keras Anda di server tempat Anda menjalankan perintah.
Untuk menyinkronkan jam perangkat keras Anda dengan waktu sistem Anda (yang dikelola oleh ntp), jalankan perintah berikut:
hwclock --systohc --utc
Argumen terakhir (--utc) memberi tahu hwclock untuk menyimpan waktu di jam perangkat keras dalam waktu universal terkoordinasi.
Selain itu, harap diingat bahwa halaman manual untuk dmesg(1) mengatakan hal berikut, sehingga perilaku yang Anda alami terdokumentasi dan valid:
-T, --ctime
Print human-readable timestamps.
Be aware that the timestamp could be inaccurate! The time
source used for the logs is not updated after system
SUSPEND/RESUME.
Solusi 3:
Untuk mendapatkan waktu yang akurat untuk entri "terbaru" di dmesg
, Anda dapat mengonversi stempel waktu dmesg menjadi waktu nyata dengan beberapa peretasan keluaran.
Dengan "baru-baru ini", maksud saya waktu setelah penangguhan/resume terakhir, karena (seperti yang telah ditunjukkan orang lain) waktu penangguhan tidak dihitung dalam stempel waktu dmesg.
Namun jika Anda sering membutuhkannya, seperti pada notebook, Anda dapat memasukkan sesuatu seperti berikut ke dalam fungsi atau alias:
# write current time to kernel ring buffer so it appears in dmesg output
echo "timecheck: $(date +%s) = $(date +%F_%T)" | sudo tee /dev/kmsg
# use our "timecheck" entry to get the difference
# between the dmesg timestamp and real time
offset=$(dmesg | grep timecheck | tail -1 \
| perl -nle '($t1,$t2)=/^.(\d+)\S+ timecheck: (\d+)/; print $t2-$t1')
# pipe dmesg output through a Perl snippet to
# convert it's timestamp to correct readable times
dmesg | tail \
| perl -pe 'BEGIN{$offset=shift} s/^\[(\d+)\S+/localtime($1+$offset)/e' $offset
# or use this instead to keep dmesg colors
dmesg --color=always | tail \
| perl -pe 'BEGIN{$offset=shift} s/^(\x1b\[.*?m)?\[(\d+)\S+/$1.localtime($2+$offset)/e' $offset
Keluaran sampel:
...
Sat Jun 29 11:12:28 2019 wlp3s0: Limiting TX power to 30 (30 - 0) dBm as advertised by 10:5a:f7:53:1d:0f
Sat Jun 29 11:12:28 2019 IPv6: ADDRCONF(NETDEV_CHANGE): wlp3s0: link becomes ready
Sat Jun 29 11:34:16 2019 timecheck: 1561800856 = 2019-06-29_11:34:16
Sat Jun 29 12:10:11 2019 wlp3s0: cannot understand ECSA IE operating class, 5, ignoring
Dibandingkan dengan dmesg
asli output (yang dimatikan selama 3 hari):
$ dmesg | tail -4
[249424.746958] wlp3s0: Limiting TX power to 30 (30 - 0) dBm as advertised by 10:5a:f7:53:1d:0f
[249424.749662] IPv6: ADDRCONF(NETDEV_CHANGE): wlp3s0: link becomes ready
[250732.318826] timecheck: 1561800856 = 2019-06-29_11:34:16
[252887.828699] wlp3s0: cannot understand ECSA IE operating class, 5, ignoring
$ dmesg -T | tail -4
[Wed Jun 26 17:59:09 2019] wlp3s0: Limiting TX power to 30 (30 - 0) dBm as advertised by 10:5a:f7:53:1d:0f
[Wed Jun 26 17:59:09 2019] IPv6: ADDRCONF(NETDEV_CHANGE): wlp3s0: link becomes ready
[Wed Jun 26 18:20:57 2019] timecheck: 1561800856 = 2019-06-29_11:34:16
[Wed Jun 26 18:56:52 2019] wlp3s0: cannot understand ECSA IE operating class, 5, ignoring