코어 덤프를 처리하기 위해 간단한 C 애플리케이션(core_app.c)을 작성했습니다.
int main(int argc, char *argv[]) {
FILE *fp = fopen("/tmp/coretest", "w");
char input[MAX_INPUT];
// write a coredump to /tmp/coretest
if (fp != 0) {
while (fgets(input, MAX_INPUT, stdin)) {
fputs(input, fp);
}
fclose(fp);
} else {
perror("[FMon] cannot open file!");
}
return EXIT_SUCCESS;
}
그런 다음 systemd 서비스를 사용하여 다음을 포함하는 core_pattern을 설정합니다.
[Service]
ExecStart=/bin/sh -c "echo '| core_app' > /proc/sys/kernel/core_pattern"
재설정 후 파일 내용이 정확합니다 /proc/sys/kernel/core_pattern
. 그러나 시스템 로그에는 다음이 표시됩니다.
Jan 01 00:19:52 kernel: Core dump to | core_app pipe failed
수도관이 고장난 이유를 아는 사람이 있습니까? 감사해요
답변1
커널은 core_pattern
프로세스의 현재 디렉터리에서 선언된 명령을 호출합니다. 이는 직접적인 커널 호출이므로 PATH 조회가 없습니다. 따라서 core_app
프로세스의 현재 디렉터리에 있는 실행 파일이어야 합니다.
core_app
프로세스의 현재 디렉토리에 관계없이 특정 실행 파일을 호출하려면 전체 경로를 사용하십시오 core_app
.
echo '|/usr/local/sbin/core_app' >/proc/sys/kernel/core_pattern