Cách chuyển đổi định dạng thời gian 'dmesg' sang định dạng thời gian 'thực'


42

Tôi có (ví dụ) mục nhật ký này trong dmesgđầu ra:

[600711.395348] do_trap: 6 callbacks suppressed

Có khả năng chuyển đổi thời gian 'dmesg' này thành 'thời gian thực' để biết, khi sự kiện này xảy ra không?

Câu trả lời:


59

Có vẻ như nó đã được triển khai gần đây cho Quantal (12.10): xem http://brainstorm.ubfox.com/idea/17829/ .

Về cơ bản, dmesgđược báo cáo là có một chuyển đổi mới -T, --ctime.


Biên tập. Là một phần mở rộng khác về câu trả lời của Ignacio, đây là một số tập lệnh để tăng cường đầu ra dmesg trên các hệ thống cũ.

(Lưu ý: đối với phiên bản python của mã được hiển thị ở đó, người ta sẽ muốn thay thế &lt;&gt;quay lại <>để làm cho nó có thể sử dụng lại được.)


Cuối cùng, đối với một giá trị như 600711.395348người ta có thể làm

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

và nhận được ngày và thời gian sự kiện.

(Xin lưu ý rằng do lỗi làm tròn số, chữ số thứ hai cuối cùng có thể sẽ không chính xác.).

Chỉnh sửa (2) : lưu ý hãy rằng - theo lời nhận xét của Womble dưới đây, - điều này sẽ chỉ làm việc nếu máy không được ngủ đông vv (Trong trường hợp đó, người ta sẽ trông đẹp hơn ở syslogconfigs tại /etc/*syslog*. Và kiểm tra các tập tin thích hợp Xem thêm : dmesg vs / var / tin nhắn .)


4
Và, như một phần thưởng bổ sung, nếu máy bị treo, bạn hoàn toàn cam chịu, vì thời gian ngủ không được tính đến.
womble

Nhận xét của Womble là siêu quan trọng! Nó sẽ hiển thị sai thời gian nếu sử dụng máy tính xách tay ngủ đông hoặc được đặt ở chế độ chờ. Bạn nên sử dụng tệp /var/log/kern.log để xem tệp thực tế.
oligofren

Một lớp lót:date -d"1970-01-01 + $(date +%s) sec - $(cut -d' ' -f1 </proc/uptime) sec + 600711.395348 sec" +"%F %T.%N %Z"
kgibm

Lưu ý: Tôi không còn có thể chỉnh sửa nhận xét của mình, nhưng thay vào đó %Z, nó sẽ như vậy UTC, vì date +%strả về giây kể từ UTC. Sau đó nó sẽ phải được chuyển đổi theo múi giờ địa phương.
kgibm

1
@kgibm: Tôi đồng ý với (2); đối với (1), không phải là tôi có bất cứ điều gì chống lại một lớp lót - nhưng tôi thực sự không thấy một điểm nào cho nó ở đây: mã ở trên được chia thành ba dòng để dễ đọc (tôi cần mọi người hiểu nó như thế nào hoạt động, không làm cho nó nhỏ gọn nhất có thể, vì điều đó, tôi sẽ xây dựng nó theo tuần tự tốt hơn) và kích thước (tôi rất thích có tên biến dài hơn, nhưng điều đó làm cho dòng 3 trông ác mộng-ish); mặt khác, có lẽ bạn sẽ không gõ toàn bộ dòng dài trong một thiết bị đầu cuối, mà thay vào đó hãy đặt nó vào một tệp và thực thi - vì vậy cũng không có chiến thắng lớn nào ở đây.
ジ ョ ー

17

Để mở rộng câu trả lời của Ignacio, các mục có trong dmesgthường được ghi lại ở nơi khác trên hệ thống, thông qua syslog, sẽ cung cấp cho bạn dấu thời gian "thực". Trừ khi Ubuntu đã thay đổi mặc định do Debian đặt, các mục nhật ký sẽ nằm trong /var/log/kern.log.


1
Trên Cent OS 5 và 6, mục nhật ký nằm trong / var / log / message.
emerino

11

Thời gian đưa ra trong dmesg là tính bằng giây kể từ khi khởi động kernel. Vì vậy, chỉ cần thêm nhiều giây vào khi kernel bắt đầu chạy (gợi ý: thời gian hoạt động).


1
Điều đó sẽ chỉ hoạt động nếu bạn đang sử dụng một hệ thống không bao giờ chuyển sang chế độ chờ. Nếu không, bạn cần phải sử dụng các bản ghi.
oligofren

2

Trên busybox, 3 lớp lót ở trên không hoạt động, vì vậy đây là cách để tôi tính toán nó một lần (thay thế 1628880.0bằng dmesgdấu thời gian của bạn ):

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

2

dmesg | perl -pe 'use Unix::Uptime; s/^\[(.*)\]/localtime(time()-Unix::Uptime->uptime()+$1)/e'


2

Tôi biết điều này bây giờ đã cũ nhưng dmesg hiện có tùy chọn tích hợp -e hoặc --reatime để hiển thị thời gian theo giờ địa phương.

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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.