清理 coredumpctl 列表

Wie*_*and 32 core-dump systemd

我正在寻找一种方法来删除coredumpctl list. 目前它列出了从 2014 年 12 月 14 日开始的核心转储 - 从那时到现在,我经常更新软件,以至于我怀疑那些旧的核心转储现在是否会帮助我调试任何问题。不幸的是,删除文件/var/lib/systemd/coredump只会使 coredumpctls 输出的“PRESENT”列中的星号消失。

我找不到任何方法来删除联机帮助页或 coredumpctl 的帮助输出中有关 coredump 的所有信息。

meg*_*ith 9

首先,您可以修剪日志,丢弃一天之前的条目:

journalctl --vacuum-time=1d
Run Code Online (Sandbox Code Playgroud)

由于“coredumpctl list”列出了日志记录的转储文件,因此您可以手动删除 /var/lib/systemd/coredump 中未列出的转储文件。

coredumpctl list
Run Code Online (Sandbox Code Playgroud)

浏览转储文件,将文件与命令结果进行比较,并删除未列出的文件。

  • 这不是一个解决方案。这甚至不是一个解决方法。该操作会在尝试删除转储时删除大量记录的内容。也不好! (15认同)

Ter*_*ang 6

journalctl仅存档日志文件,不包括coredump文件,除非专门设置Storage=journal。所以接受的答案不正确(缺少条件)。

例如,journalctl --vacuum-time=7d保留不超过 7 天的日记。

我能找到的最接近的是该coredump.conf文件,用于MaxUse强制外部(默认)存储的核心转储占用磁盘空间Storage=external,默认为/var/lib/systemd/coredump.

查看kernel.core_pattern

cat /proc/sys/kernel/core_pattern
|/usr/lib/systemd/systemd-coredump %P %u %g %s %t %c %h
Run Code Online (Sandbox Code Playgroud)

实时FM


小智 6

这个食谱对我有用(Fedora 37)。简而言之,首先分离当前的systemd日志文件并用新创建的日志文件替换它们非常重要:

sudo journalctl --rotate
Run Code Online (Sandbox Code Playgroud)

然后进行清理:

sudo journalctl --vacuum-time=1d
Run Code Online (Sandbox Code Playgroud)

在那之后:

sudo journalctl --rotate
Run Code Online (Sandbox Code Playgroud)


Enz*_*zoR 5

看起来正确答案比想象的要容易。

为了清理 systemd-coredump 存储的所有转储核心,您可以运行(如root):

systemd-tmpfiles --clean
Run Code Online (Sandbox Code Playgroud)

您仍然会获得转储核心的列表:

coredumpctl
Run Code Online (Sandbox Code Playgroud)

但转储的核心实际上会消失,并且输出会告诉您它们已经消失missing。请参阅相关手册以获取更多详细信息。

如果您想完全禁用此功能,您可以通过(如)systemd来完成:systemctlroot

systemctl disable systemd-coredump.socket
systemctl stop systemd-coredump.socket
systemctl status systemd-coredump.socket
systemctl disable systemd-coredump.socket
Run Code Online (Sandbox Code Playgroud)

请注意,此操作不会在重新启动后继续存在:systemd 将在重新启动时重新启用它!

要真正实现这一点,您必须“隐藏”该 systemd 模块。这反过来又转化为:

sudo ln -fs /dev/null /etc/sysctl.d/50-coredump.conf
Run Code Online (Sandbox Code Playgroud)

请记住,至少在我的 Arch Linux 机器上,我的/proc/sys/kernel/core_pattern读取|/bin/false完全避免了通过二进制文件传输核心转储/bin/false(根本不执行任何操作)的任何核心转储。

请检查相关的手册页和您的分发文档以获取更多详细信息。


Ber*_* M. 1

元数据似乎保存在 systemd 日志中,所以它已经消失了

rm /var/log/journal/*/*
killall -9 systemd-journald
Run Code Online (Sandbox Code Playgroud)

缺点是所有其他系统日志也消失了。

也许更清洁的方法是如何清除journalctl中给出的方法

journalctl --vacuum-time=2d
Run Code Online (Sandbox Code Playgroud)

  • 这不是一个解决方案。这甚至不是一个解决方法。该操作会删除所有记录的内容以及转储。不好! (19认同)