커널 패닉이 발생할 때 자동으로 재부팅하려는 임베디드 Linux 시스템이 있습니다. 그러나 부팅 시 마지막 재부팅이 커널 패닉으로 인한 것인지 아니면 클린 재부팅으로 인한 것인지 확실하게 확인할 수 있는 방법이 있습니까?
다음을 사용하여 의도적으로 커널 패닉을 유발할 때 특히 syslogs
이에 의존할 수 없는 것 같습니다 .kern.log
echo c > /proc/sysrq-triger
다음 부팅 시에는 커널 패닉 덤프가 syslogs
없습니다 .kern.log.*
last -x
또한 마지막 재부팅이 깨끗하지 않았다는 힌트를 얻기 위해 출력을 읽는 것을 살펴봤지만 로그인 세션이 완전히 종료되지 않은 경우에만 표시됩니다 crash
. pts
임베디드 시스템은 SSH나 시리얼을 사용하는 수동 상호작용 없이 실행되고 있고 로그인한 사용자가 없기 때문에 이에 의존할 수도 없습니다.
또한 참고: 내가 사용하고 있는 임베디드 BSP는 이것을 지원하지 않으므로 ramoops-pstore
나에게도 작동하지 않습니다.
답변1
커널 충돌 후 커널이 안정적으로 작동하지 않기 때문에 로그에 정보가 기록되지 않습니다(파일 시스템 구조가 손상되었을 수 있으며 디스크에 쓰면 상황이 더 악화될 수 있음).
따라서 로그에서 커널 패닉 항목을 확인하는 대신 완전히 종료하거나 재부팅할 때마다 로그에 메시지를 기록하는 코드를 반대 방법으로 추가할 수 있습니다. 이 코드를 추가하는 위치는 사용 중인 초기화 시스템에 따라 다릅니다.
그런 다음 시작 시 메시지를 확인할 수 있습니다. 현재 부팅과 관련된 항목 이전에 찾으면 종료/재부팅이 커널 패닉으로 인한 것이 아니라는 것을 알 수 있으며, 없으면 커널 패닉(또는 정전)이 발생한 것입니다.