dmesg에 로그 파일을 저장하는 방법은 무엇입니까?

dmesg에 로그 파일을 저장하는 방법은 무엇입니까?

내 전화기가 계속 다시 시작됩니다. 진단할 수 있도록 재부팅 시 dmesg가 무엇을 말할지 알고 싶습니다.

불행히도 재부팅은 예상대로 발생하지 않으며 사용할 때만 발생합니다. 며칠 동안 휴대폰을 노트북에 연결할 수 없습니다. 이제 adb를 통해 연결했는데 물론 작은 Varlet이 다시 시작되지 않았습니다. last_kmsg도 없습니다.

버전은 LineageOS 14 입니다. 이 질문에 대한 답변이 모든 UNIX 기반 시스템에 적용될 수 있기 때문에 여기에 글을 게시하게 되었습니다. 마음에 들지 않는다면 안드로이드로 옮기고 싶습니다.

내 가정은 다시 시작할 때까지 로그에 계속 기록된다는 것입니다. 전화기가 자동으로 재부팅되지 않으면 결국 로그가 SD 카드를 가득 채울 것이라는 것을 깨달았습니다. 그래서 저는 다음과 같은 스크립트를 상상하고 있습니다.

dmesg to log.1
if log.1 >1mb, delete it 
dmesg log.2
if log.2 >1mb, delete it 
dmesg to log.1

비록 제가 글을 쓸 능력은 없지만. 누구든지 도와줄 수 있나요?

답변1

스크립트를 실행하기에 충분한 자금이 있는 경우 파일 카운터를 유지하고 이를 사용하여 bash로그 파일의 순환 시퀀스를 생성합니다.dmesg

#!/bin/bash
dir=/path/to/storage                             # Location of persistent storage

[[ -z "$dir/count" ]] && echo 0 >"$dir/count"    # Seed the counter if missing

while sleep 0.25
do
    count=$(( $(cat "$dir/count") +1 ))          # Read the counter and increment
    [[ $count -gt 600 ]] && count=1              # Reset so we can reuse diskspace

    echo $count >"$dir/count"                    # Save the new value
    dmesg >"$dir/dmesg.$count"                   # Write the data
done

ls -t로그 파일은 순환 버퍼처럼 쓰고 다시 쓰기 때문에 날짜 수정 순서( )로 최대 600개의 로그 파일에 대한 결과 집합을 확인해야 합니다 .

관련 정보