Coredump를 사용자 정의 애플리케이션으로 파이프하는 방법은 무엇입니까?

Coredump를 사용자 정의 애플리케이션으로 파이프하는 방법은 무엇입니까?

코어 덤프를 처리하기 위해 간단한 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

관련 정보