我假装我已经尝试了所有的方法,但是当我的 Debian 8 发生崩溃时,我会不断创建核心转储。它大约在一个月内发生一次或两次。它是一些网站的生产服务器,带有打包的 Apache 2.4、php5-fpm 和 mysql。我怀疑它是 php5-fpm 崩溃,因为我在 DocumentRoot 文件夹中获取了转储文件。我得到的文件名为“核心”,它的大小约为千兆字节。
这是我已经为禁用核心转储所做的,但没有成功:
ln -s /dev/null /etc/systemd/coredump.conf
然后重新启动。没有骰子。
echo '* hard core 0' >> /etc/security/limits.conf
echo "fs.suid_dumpable = 0" >> /etc/sysctl.conf
sysctl -p
然后重新启动。还是没有骰子。我没有将 kernel.suid_dumpable 设置为 0,因为我后来找到了它,但是当我找到它时,我还读到零是它的默认值。无论如何,这些设置不应该有任何区别,因为 php5-fpm 不是 setuid。Apache 和 mysql 也是如此,以防它不是 php5-fpm 崩溃。
目前有一个脚本可以查找核心转储并删除它们。Crontab 完成了剩下的工作,但它不是最好的解决方案。
如何在 Debian 8 中全局且无条件地禁用核心转储?
在 Michael Hampton 对 Froggiz 的回答发表评论后,我注意到 Debian 似乎缺少 coredump.conf 手册页,所以我在互联网上寻找并找到了它。该手册页包含很多有用的信息,我想知道为什么 Debian 没有它(也许 Debian 没有整个 systemd-coredump 的东西?)。
但是,从该手册页和 systemd-coredump 手册页看来,我得到的核心文件并非来自 systemd,因为 systemd 将它们放在 /var/lib/systemd/coredump 或取决于 Storage 选项的日志中,但从不在崩溃进程的工作目录。此外,systemd-coredump 手册页(在 Debian 中也没有)说,要使核心转储功能正常工作,您需要配置 kernel.core_pattern sysctl 参数以使内核实际上将核心转储交给 systemd-coredump。
然后,我查看了 kernel.core_pattern 的 Debian 值:Debian 默认情况下将该参数设置为“core”,这恰好是我得到的核心转储文件的名称。
我现在假设该设置
(或 /bin/false )根据 core(5) 手册页在 sysctl.conf 中解决问题。
如果我注意到服务器停止创建核心文件,我将在几周内最终接受我的答案。很抱歉,我不能接受迈克尔的评论作为答案,但非常感谢他为我指出了我认为正确的方向。
编辑:我在这里找到了一种无需等待自发崩溃即可测试配置的方法,我确认这是正确的答案。
你可以试试这个: https ://wiki.archlinux.org/index.php/Systemd#Disabling_application_crash_dumps_journaling