dmesg समय बनाम सिस्टम का समय सही नहीं है


14

मुझे उम्मीद है कि यहां कोई ऐसा व्यक्ति है जो इस अजीब समस्या के साथ मेरी मदद कर सकता है।

मुझे लगता है कि मुझे पता है कि ऐसा क्यों हो रहा है लेकिन मुझे नहीं पता कि इसे कैसे हल किया जाए। हो सकता है कि ऐसा इसलिए हो क्योंकि BIOS समय सही या कुछ सेट नहीं है। लेकिन मैं लगभग 400+ सर्वर के BIOS समय को बदलना नहीं चाहता। (या 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

सर्वर टाइम सिंक के लिए ntp चला रहा है।

यहां कोई भी व्यक्ति जानता है कि ओएस में इस समस्या को कैसे ठीक किया जाए?

Linux spool 3.2.0-4-amd64 #1 SMP Debian 3.2.46-1+deb7u1 x86_64 GNU/Linux

क्यों, जब /dev/kmsgमेरे संदेश की गूंज / तिथि, dmesgसिस्टम दिनांक / समय के साथ सिंक्रनाइज़ नहीं होती है?


क्या आप सुनिश्चित हैं कि आपकी स्थानीय फ़ाइल /etc/localtimeसही है? syslogस्थानीयसमय से समय मिलता।
विक्टरली

मैं इसका उपयोग journalctl -kअभी (जर्नल के साथ सिस्टम पर) ठीक इसी वजह से करता हूं । इसमें मेरा समय क्षेत्र, सही समय शामिल है।
नवोदित कलाकार

जवाबों:


6

अपने सिद्धांत को सत्यापित करने के लिए (जो, वैसे, ध्वनि है), निम्नलिखित को मूल रूप में निष्पादित करें:

hwclock --show

यह आपको उस सर्वर पर आपकी हार्डवेयर घड़ी दिखाएगा जिसे आप कमांड निष्पादित कर रहे हैं।

अपने सिस्टम-टाइम (जिसे ntp द्वारा प्रबंधित किया जाता है) के साथ अपनी हार्डवेयर घड़ी को सिंक्रनाइज़ करने के लिए, निम्न कमांड चलाएँ:

hwclock --systohc --utc

अंतिम तर्क (--utc) समन्वित सार्वभौमिक समय में हार्डवेयर घड़ी में समय को स्टोर करने के लिए hwclock को बताता है।

इसके अतिरिक्त, कृपया ध्यान रखें कि dmesg (1) के लिए आदमी पृष्ठ निम्नलिखित कहता है, इसलिए आपके द्वारा अनुभव किया जा रहा व्यवहार प्रलेखित और मान्य है:

   -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.

1
आपके उत्तर के लिए धन्यवाद। लेकिन दुर्भाग्य से काम नहीं किया ... मैंने जो किया वह निम्न है: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
1400 glegle

ठीक है, dmesg -T टाइमस्टैम्प (प्रलेखन के अनुसार) की शुद्धता की गारंटी नहीं देता है, इसलिए उचित लॉगिंग डेमॉन (जैसे क्लॉग) का उपयोग करें और आपको कर्नेल संदेशों के लिए सही टाइमस्टैम्प मिलेंगे।
आकाशगंगा

1
तो dmesg में गलत टाइमस्टैम्प का कोई समाधान नहीं है?
१00

AFAIK, नहीं, वहाँ नहीं है। इसके अलावा, dmesg के लिए यह -T विकल्प काफी हालिया जोड़ है (डेबियन द्वारा?) और लिनक्स डिस्ट्रोस के अधिकांश ऐसे विकल्प के बारे में नहीं जानते हैं। यह आपके लिए एक डील ब्रेकर क्यों है? मैंने एक समाधान फिर से प्रदान किया है: कर्नेल संदेशों (यानी klogd) के लिए उचित टाइमस्टैम्प कैसे प्राप्त करें।
आकाशगंगा

1
मेरे पास अपने सर्वर पर एक ही मुद्दा है और निश्चित रूप से यह बता सकता है कि मशीन को कभी भी निलंबित / फिर से शुरू किया गया था। क्या कोई और कारण है कि टाइमस्टैम्प बंद हो सकता है? (ntp और हार्डवेयर का समय सही है और हमेशा रहा है)
Daywalker

12

dmesg सिर्फ कर्नेल रिंगबफ़र प्रिंट करता है जो टाइमस्टैम्प के रूप में शुरू होने से सेकंड में संदेश के साथ लॉग करता है।

इसलिए यदि आप -T विकल्प का उपयोग करते हैं तो यह सभी अपटाइम वैल्यूज़ आपके सिस्टम के बूट होने की तिथि में जोड़ दी जाती हैं। यदि आपके पास सस्पेंड या फिर से शुरू होने के समय में सो रहा था, तो वे खो गए हैं, इसलिए इस मामले में -T विकल्प उपयोगी नहीं है, क्योंकि दिनांक / समय मान सही नहीं हैं और अतीत में वापस आ गए हैं।


3

"हाल की" प्रविष्टियों के लिए सटीक समय प्राप्त करने के लिए dmesg, आप आउटपुट के कुछ हैकिंग के साथ डैमेज टाइमस्टैम्प को वास्तविक समय में बदल सकते हैं।

"हाल के" द्वारा, मेरा मतलब है कि पिछले सस्पेंड / फिर से शुरू होने के बाद का समय, क्योंकि (जैसा कि अन्य पहले ही बता चुके हैं) सस्पेंड के समय को डैम्सग टाइमस्टैम्प में नहीं गिना जाता है।

लेकिन अगर आपको इसकी आवश्यकता अक्सर होती है, जैसे कि नोटबुक पर, तो आप निम्न कार्यों या उपनामों में कुछ डाल सकते हैं:

# write current time to kernel ring buffer
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

नमूना उत्पादन:

...
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

मूल dmesgउत्पादन की तुलना में (जो 3 दिनों से बंद है):

$ 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

शानदार, और वास्तव में मुझे अपने लैपटॉप के लिए क्या चाहिए! :-) क्या यह एक तरीका है - dmesg के साथ काम करने के लिए = हमेशा dmesg के लिए विकल्प, जबकि अभी भी perl प्रतिस्थापन की अनुमति है (यानी कलर कोड के लिए अनुमति देता है)?
एस्ट्रोफ्लोइड

1
@AstroFloyd: हाँ। dmesgअपडेटेड रेगेक्स के साथ वैकल्पिक लाइन देखें ।
mivk

अगर मैं कर सकता तो फिर से उखाड़ फेंको - बहुत बहुत धन्यवाद! :-)
एस्ट्रोफ्लोयड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.