在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
然后它的工作原理。我错过了什么?
答案 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)
这里已经解决了:http://www.linuxquestions.org/questions/showthread.php?p=4871150#post4871150 感谢millgates和ydroneaud!
答案 4 :(得分:-1)
这对我有用,应该是公认的答案。不是每个人都有能力包装在一个单独的脚本中。
d