我试图使用 systemd-coredump 强制进行核心转储,但是,当我检查日志时,我看到以下错误:
[电子邮件受保护]:在步骤 NETWORK 生成 /lib/systemd/systemd-coredump 时失败:参数无效
并coredumpctl
报告没有核心。
我的核心模式是:
|/lib/systemd/systemd-coredump %P %u %g %s %t %c %e
/lib/systemd/systemd-coredump 确实存在并且可执行。我注意到在 /etc/systemd/coredump.conf 中,所有内容都被注释掉了。
[Coredump]
#Storage=external
#Compress=yes
#ProcessSizeMax=2G
#ExternalSizeMax=2G
#JournalSizeMax=767M
#MaxUse=
#KeepFree=
……这让我觉得很奇怪……
有没有一种方法可以“预览”已扩展的 core_pattern 的参数,这些参数已被输入到 systemd-coredump 中 - 这样我就可以看到那里是否有任何奇怪的事情......否则,知道问题可能是什么?
编辑
我还尝试将 core_pattern 设置为指向类似的文件
bash -c 'echo "/home/root/core.%e.%p" > /proc/sys/kernel/core_pattern'
和
ulimit -c unlimited
但这也不起作用——核心文件没有被创建。
答案1
我设法通过解决方法从中获得核心(我认为!)。这仍然没有回答问题,但至少让我克服了这个困难。
我创建了自己的脚本:
#!/bin/bash
echo $@ > /home/root/arguments.txt
if [ -p /dev/stdin ]; then
echo "Data was piped to this script!" >> /home/root/arguments.txt
cat > /home/root/core.bin
else
echo "No data received" >> /home/root/arguments.txt
fi
并将 core_pattern 设置为通过此脚本进行管道传输,而不是systemd-coredump
这使我能够看到传递到脚本中的参数(因此它确实回答了问题的那部分!),arguments.txt
并且核心本身被写入core.bin
(至少我认为这是核心 - 它没有给我提供大量信息,但我是 gdb 的新手,所以这可能就是原因。)