コアダンプを処理するために、単純な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