核心转储到管道失败

时间:2013-01-16 08:43:32

标签: linux pipe mips core dump

在MIPS平台上尝试过这个:

> uname -a
Linux (none) 2.6.29 #2 Mon Jan 14 13:26:04 PST 2013 mips GNU/Linux
> ulimit -c unlimited
> which gzip
/bin/gzip
> echo "|/bin/gzip - > /home/core-%t-%s-%e.gz" > /proc/sys/kernel/core_pattern
> ./fault
hello there
Segmentation fault (core dumped)
> ls /home/core*.gz
ls: /home/core*: No such file or directory

即。管道到程序不起作用。如果我指定一个文件:

> echo "/home/core-%t-%s-%e" > /proc/sys/kernel/core_pattern

然后它的工作原理。我错过了什么?

5 个答案:

答案 0 :(得分:4)

也许它失败了,因为内核没有运行任何shell,而是尝试执行程序。 尝试使用脚本中的重定向包装gzip调用并使用该脚本。

答案 1 :(得分:0)

只是包装在一个脚本中并不适合我,我还必须在core.sh中指定适当的shell环境

root@fredy:/data/cores# cat /usr/local/sbin/core.sh
#!/bin/sh
exec /usr/bin/pigz -f - >"/data/cores/core-$1-$2-$3-$4-$5.gz"

root@fredy:/data/cores# cat /proc/sys/kernel/core_pattern
|/usr/local/sbin/core.sh %e %p %h %s %t

答案 2 :(得分:0)

Eric的回答略有改进:

sysctl -w kernel.core_pattern='|/bin/sh -c $@ -- eval exec gzip --fast > /var/crash/core-%e.%p.gz'

确实不需要将shell保存为单独的文件。在CentOS-7.7上检查过。

答案 3 :(得分:-1)

答案 4 :(得分:-1)

这对我有用,应该是公认的答案。不是每个人都有能力包装在一个单独的脚本中。

d