Saya harap ada seseorang yang bisa membantu saya dengan masalah aneh ini.
Saya pikir saya tahu mengapa itu terjadi tetapi saya tidak tahu bagaimana menyelesaikannya. Mungkin itu karena waktu BIOS tidak diatur dengan benar atau sesuatu seperti itu. Tetapi saya tidak ingin mengubah waktu BIOS sekitar 400+ server. (Atau ubah batt BIOS)
root@spool:~# echo TEST > /dev/kmsg
root@spool:~# dmesg -T | tail -1
[Mon Feb 17 04:57:03 2014] TEST
root@spool:~# date
Mon Feb 17 11:45:17 CET 2014
Server menjalankan ntp untuk sinkronisasi waktu.
Adakah yang tahu cara memperbaiki masalah ini di OS?
Linux spool 3.2.0-4-amd64 #1 SMP Debian 3.2.46-1+deb7u1 x86_64 GNU/Linux
Mengapa, ketika menggema ke /dev/kmsg
, tanggal / waktu pesan saya di dmesg
tidak disinkronkan dengan tanggal / waktu sistem?
/etc/localtime
benar? Thesyslog
mendapatkan waktu dari localtime.journalctl -k
sekarang (pada sistem dengan journald) justru karena ini. Ini termasuk waktu yang tepat, di zona waktu saya.Jawaban:
Untuk memverifikasi teori Anda (yang, omong-omong, suara), jalankan yang berikut ini sebagai root:
Ini akan menunjukkan jam perangkat keras Anda di server Anda menjalankan perintah.
Untuk menyinkronkan jam perangkat keras Anda dengan waktu sistem Anda (yang dikelola oleh ntp), jalankan perintah berikut:
Argumen terakhir (--utc) memberi tahu hwclock untuk menyimpan waktu dalam jam perangkat keras dalam waktu universal terkoordinasi.
Selain itu, harap diingat bahwa halaman manual untuk dmesg (1) mengatakan yang berikut, sehingga perilaku yang Anda alami didokumentasikan dan valid:
sumber
root@spool:~# hwclock --show
Mon Feb 17 20:30:14 2014 -0.985068 seconds
root@spool:~# hwclock --systohc --utc
root@spool:~# echo TEST > /dev/kmsg
root@spool:~# dmesg -T | tail -1
[Mon Feb 17 13:50:14 2014] TEST
root@spool:~# date
Mon Feb 17 20:30:46 CET 2014
dmesg hanya mencetak ringbuffer kernel yang mencatat pesan dengan uptime dalam hitungan detik agar tidak dimulai sebagai cap waktu.
Jadi, jika Anda menggunakan opsi -T, semua nilai uptime ini hanya ditambahkan ke tanggal sistem Anda di-boot. Jika Anda memiliki waktu tidur dalam penundaan atau melanjutkan, mereka hilang, jadi dalam kasus ini -T opsi tidak berguna, karena nilai tanggal / waktu tidak benar dan kembali di masa lalu.
sumber
Untuk mendapatkan waktu yang akurat untuk entri "baru"
dmesg
, Anda dapat mengubah cap waktu dmesg menjadi waktu nyata dengan beberapa peretasan dari keluaran.Yang dimaksud dengan "baru-baru ini", maksud saya waktu setelah penangguhan / resume terakhir, karena (sebagaimana yang telah ditunjukkan sebelumnya) waktu penangguhan tidak dihitung dalam cap waktu dmesg.
Tetapi jika Anda sering membutuhkannya, seperti pada buku catatan, Anda dapat memasukkan sesuatu seperti yang berikut ke dalam fungsi atau alias:
Output sampel:
Dibandingkan dengan
dmesg
output asli (yang dimatikan 3 hari):sumber
dmesg
baris alternatif dengan regex yang diperbarui.