'Dmesg' टाइम फॉर्मेट को 'real' टाइम फॉर्मेट में कैसे कन्वर्ट करें


42

मेरे पास (उदाहरण के लिए) dmesgआउटपुट में यह लॉग प्रविष्टि है :

[600711.395348] do_trap: 6 callbacks suppressed

क्या इस 'dmesg' के समय को 'वास्तविक' समय में बदलने की संभावना है, यह जानने के लिए कि यह ईवेंट कब ख़ुशी देता है?

जवाबों:


59

ऐसा लगता है कि यह हाल ही में क्वांटल (12.10) के लिए लागू किया गया था: http://brainstorm.ubuntu.com/idea/17.1029/ देखें ।

मूल रूप से, dmesgएक नया स्विच होने की सूचना है -T, --ctime


संपादित करें। इग्नेसियो के जवाब पर एक और विस्तार के रूप में, यहाँ कुछ स्क्रिप्ट पुराने सिस्टम पर उत्पादन dmesg को बढ़ाने के लिए कर रहे हैं।

(नोट: वहां दिखाए गए कोड के अजगर संस्करण के लिए, कोई इसे फिर से उपयोग करने योग्य बनाने के लिए प्रतिस्थापित करना &lt;और &gt;वापस करना चाहेगा <>।)


अंत में, एक मूल्य के लिए जैसे 600711.395348एक कर सकता था

ut=`cut -d' ' -f1 </proc/uptime` 
ts=`date +%s` 
date -d"70-1-1 + $ts sec - $ut sec + 600711.395348 sec" +"%F %T"

और घटना की तारीख और समय प्राप्त करें।

(कृपया ध्यान दें कि राउंड-ऑफ त्रुटियों के कारण अंतिम दूसरा अंक संभवतः सटीक नहीं होगा।)

संपादित करें (2) : कृपया ध्यान दें कि - नीचे Womble की टिप्पणी के अनुसार, - यह केवल तभी काम करेगा जब मशीन को हाइबरनेट नहीं किया गया था आदि (उस स्थिति में, कोई व्यक्ति बेहतर तरीके से syslogकॉन्फ़िगर को देखेगा /etc/*syslog*और उपयुक्त फ़ाइलों की जांच करेगा। : dmesg बनाम / var / संदेश ।)


4
और, एक अतिरिक्त बोनस के रूप में, यदि मशीन को कभी भी निलंबित कर दिया गया है, तो आप पूरी तरह से बर्बाद हो जाते हैं, क्योंकि समय बिताने के लिए जिम्मेदार नहीं है।
Womble

वोमबले की टिप्पणी सुपर महत्वपूर्ण है! यह गलत समय दिखाएगा यदि लैपटॉप का उपयोग किया जाए जो हाइबरनेट करता है या स्टैंडबाय में सेट होता है। वास्तविक फ़ाइल देखने के लिए आपको /var/log/kern.log फ़ाइल का उपयोग करना चाहिए।
ऑलिगॉफ्रेन

एक-लाइनर:date -d"1970-01-01 + $(date +%s) sec - $(cut -d' ' -f1 </proc/uptime) sec + 600711.395348 sec" +"%F %T.%N %Z"
kgibm

नोट: मैं अब अपनी टिप्पणी संपादित नहीं कर सकता, लेकिन इसके बजाय %Z, यह यूटीसी के बाद UTCसे date +%sरिटर्न सेकंड के बाद से होना चाहिए । फिर इसे स्थानीय समय क्षेत्र में परिवर्तित करना होगा।
किकिब

1
@kgibm: मैं इससे सहमत हूँ (2); (1) के रूप में, ऐसा नहीं है कि मेरे पास वन-लाइनर्स के खिलाफ कुछ भी है - लेकिन मैं वास्तव में इसके लिए एक बिंदु नहीं देखता हूं: ऊपर कोड जानबूझकर पठनीयता के लिए तीन लाइनों में विभाजित है (मुझे यह समझने के लिए लोगों की आवश्यकता है कि यह कैसे होता है काम करता है, इसे यथासंभव कॉम्पैक्ट न बनाएं; इसके लिए, मैं इसे क्रमिक रूप से बेहतर बनाऊंगा) और आकार (मुझे लंबे चर नाम रखना पसंद होगा, लेकिन यह पंक्ति 3 को बुरा सपना बनाता है); दूसरी ओर, आप शायद एक टर्मिनल में पूरी लंबी लाइन में टाइप नहीं करेंगे, बल्कि इसे एक फाइल में डालकर निष्पादन योग्य बना देंगे - इसलिए यहाँ कोई बड़ी जीत नहीं है।

17

इग्नासियो के जवाब का विस्तार करने के लिए, dmesgआमतौर पर निहित प्रविष्टियां भी सिस्टम पर कहीं और लॉग इन की जाती हैं, सिसलॉग के माध्यम से, जो आपको "वास्तविक" टाइमस्टैम्प प्रदान करेगी। जब तक उबंटू ने डेबियन-सेट डिफॉल्ट को नहीं बदला है, लॉग एंट्रीज होनी चाहिए /var/log/kern.log


1
Cent OS 5 और 6 पर, लॉग प्रविष्टि / var / log / संदेशों में है।
19

11

Dmesg में दिया गया समय कर्नेल स्टार्टअप के बाद से सेकंड में है। इसलिए, कर्नेल को चलाने के लिए बस कुछ सेकंड जोड़ें (संकेत: अपटाइम)।


1
यह तभी काम करेगा जब आप ऐसी प्रणाली का उपयोग कर रहे हैं जो कभी भी स्टैंडबाय में नहीं जाती है। अन्यथा आपको लॉग का उपयोग करने की आवश्यकता है।
ऑलिगॉफ्रेन

2

बिजीबॉक्स में, ऊपर का 3 लाइनर काम नहीं करता था, इसलिए यहाँ एक गणना करने का यह मेरा तरीका है ( 1628880.0अपने dmesgटाइमस्टैम्प के साथ बदलें ):

perl -e '@a=split(`/proc/uptime`);print scalar(localtime(time()+$a[0] - 1628880.0)."\n");'


2

मुझे पता है कि यह अब पुराना है, लेकिन स्थानीय समय में समय प्रदर्शित करने के लिए dmesg में एक अंतर्निर्मित या निर्मित विकल्प है।

root@bbs:/var/log# dmesg|tail -1
[50755952.379177] Out of memory in UB 1593: OOM killed process 3183 (sbbs) score 0 vm:747204kB, rss:242764kB, swap:88224kB

root@bbs:/var/log# dmesg -e|tail -1
[Feb20 17:10] Out of memory in UB 1593: OOM killed process 3183 (sbbs) score 0 vm:747204kB, rss:242764kB, swap:88224kB
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.