'dmesg'시간 형식을 '실시간'형식으로 변환하는 방법


42

dmesg출력 에이 로그 항목이 있습니다 (예 :).

[600711.395348] do_trap: 6 callbacks suppressed

이 이벤트가 발생했을 때이 'dmesg'시간을 '실시간'시간으로 변환 할 가능성이 있습니까?

답변:


59

Quantal (12.10)에 대해 최근에 구현 된 것처럼 보입니다 : http://brainstorm.ubuntu.com/idea/17829/ 참조 .

기본적으로 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"

이벤트 날짜와 시간을 가져옵니다.

반올림 오류로 인해 마지막 두 번째 숫자가 정확하지 않을 수 있습니다.

Edit (2) : 아래 Womble의 의견에 따라 컴퓨터가 최대 절전 모드가 아닌 경우에만 작동합니다. (이 경우 syslog구성을 보다 잘보고 /etc/*syslog*적절한 파일을 확인하십시오.) : dmesg vs / var / messages )


4
또한, 추가 보너스로서, 기계가 정지 된 경우, 잠든 시간이 고려되지 않기 때문에 완전히 파산하게됩니다.
womble

Womble의 의견은 매우 중요합니다! 최대 절전 모드이거나 대기 모드로 설정된 랩톱을 사용하는 경우 잘못된 시간이 표시됩니다. 실제 파일을 보려면 /var/log/kern.log 파일을 사용해야합니다.
oligofren

한 줄짜리 :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 +%sUTC 이후 반환 초. 그런 다음 현지 시간대로 변환해야합니다.
kgibm

1
@kgibm : 나는 (2)에 동의한다. (1)에 관해서는, 나는 하나의 라이너에 대해 아무것도 가지고 있지는 않지만 실제로 여기에 대한 요점을 보지 못합니다. 위의 코드는 의도적으로 가독성을 위해 세 줄로 나뉩니다 (사람들이 어떻게 그것을 이해해야 합니다) 가능한 한 컴팩트하게 만들지 않습니다. 그래서, 나는 그것을 순차적으로 더 잘 구축 할 것입니다)) 반면에 터미널에 긴 줄을 입력하지는 않지만 파일에 넣고 실행 파일을 만들면 큰 승리는 없습니다.
ジョージ

17

Ignacio의 답변을 확장하기 위해 포함 된 항목 dmesg은 일반적으로 syslog를 통해 시스템의 다른 곳에 기록되므로 "실제"타임 스탬프가 제공됩니다. 데비안 설정 기본값을 변경하지 않은 경우 로그 항목은에 있어야합니다 /var/log/kern.log.


1
Cent OS 5 및 6에서 로그 항목은 / var / log / messages에 있습니다.
emerino

11

dmesg에 주어진 시간은 커널 시작 이후 몇 초입니다. 따라서 커널 실행이 시작될 때까지 몇 초만 추가하십시오 (힌트 : 가동 시간).


1
대기 모드로 전환되지 않는 시스템을 사용하는 경우에만 작동합니다. 그렇지 않으면 로그를 사용해야합니다.
oligofren

2

busybox에서 위의 3 라이너가 작동하지 않았으므로 여기에서 하나를 계산하는 방법 1628880.0이 있습니다 ( dmesg타임 스탬프로 교체 ).

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

나는 이것이 오래되었다는 것을 알고 있지만 dmesg에는 현지 시간으로 시간을 표시하는 내장 -e 또는 --reatime 옵션이 있습니다.

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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.