ฉันมี (ตัวอย่าง) รายการบันทึกนี้ในdmesg
ผลลัพธ์:
[600711.395348] do_trap: 6 callbacks suppressed
มีความเป็นไปได้ไหมที่จะแปลงเวลา 'dmesg' เป็น 'จริง' ถึงเวลาที่รู้เมื่อเหตุการณ์นี้เกิดขึ้น?
ฉันมี (ตัวอย่าง) รายการบันทึกนี้ในdmesg
ผลลัพธ์:
[600711.395348] do_trap: 6 callbacks suppressed
มีความเป็นไปได้ไหมที่จะแปลงเวลา 'dmesg' เป็น 'จริง' ถึงเวลาที่รู้เมื่อเหตุการณ์นี้เกิดขึ้น?
คำตอบ:
มันดูราวกับว่ามันถูกนำมาใช้เร็ว ๆ นี้สำหรับ Quantal (12.10): ดูhttp://brainstorm.ubuntu.com/idea/17829/
โดยทั่วไปจะมีการรายงานที่จะมีสวิทช์ใหม่ dmesg
-T, --ctime
แก้ไข ในฐานะที่เป็นส่วนขยายอื่นสำหรับคำตอบของ Ignacio นี่คือสคริปต์บางส่วนเพื่อเพิ่มประสิทธิภาพ dmesg ในระบบเก่า
(หมายเหตุ: สำหรับรหัสไพ ธ อนของรหัสที่แสดงที่นั่นหนึ่งจะต้องการแทนที่<
และ>
กลับไป<>
เพื่อให้สามารถใช้งานได้อีกครั้ง)
ในที่สุดสำหรับค่าเดียว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 vs / var / messages )
date -d"1970-01-01 + $(date +%s) sec - $(cut -d' ' -f1 </proc/uptime) sec + 600711.395348 sec" +"%F %T.%N %Z"
%Z
ควรเป็นUTC
เพราะdate +%s
จะส่งกลับวินาทีตั้งแต่ UTC จากนั้นจะต้องถูกแปลงเป็นเขตเวลาท้องถิ่น
เพื่อขยายคำตอบของอิกนาชิโอdmesg
โดยทั่วไปแล้วรายการที่อยู่ในนั้นจะถูกบันทึกไว้ที่อื่นบนระบบผ่าน syslog ซึ่งจะให้เวลา "จริง" กับคุณ เว้นแต่อูบุนตูมีการเปลี่ยนแปลงเริ่มต้น Debian ชุด, /var/log/kern.log
รายการบันทึกควรจะอยู่ใน
เวลาที่กำหนดใน dmesg เป็นวินาทีตั้งแต่การเริ่มต้นเคอร์เนล ดังนั้นเพียงแค่เพิ่มเวลาหลายวินาทีในการที่เคอร์เนลเริ่มทำงาน (คำแนะนำ: สถานะการออนไลน์)
บน busybox 3 ซับด้านบนไม่ทำงานดังนั้นนี่คือวิธีของฉันในการคำนวณหนึ่งครั้ง (แทนที่1628880.0
ด้วยการdmesg
ประทับเวลาของคุณ):
perl -e '@a=split(`/proc/uptime`);print scalar(localtime(time()+$a[0] - 1628880.0)."\n");'
dmesg | perl -pe 'use Unix::Uptime; s/^\[(.*)\]/localtime(time()-Unix::Uptime->uptime()+$1)/e'
ฉันรู้ว่าตอนนี้เก่าแล้ว แต่ตอนนี้ 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