我编写了一个简单的 C 应用程序(在 core_app.c 中)来处理 coredump:
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