如何清除journalctl

Łuk*_*oda 395 systemd systemd-journald

我在谷歌找不到任何安全的方法来清除 systemd 日志。有谁知道这样做的任何安全可靠的方法?

假设我正在尝试一些东西,我的日志被各种错误消息弄得乱七八糟。此外,我正在使用 Conky 在桌面上显示我的日记。我真的不想看到那些错误,因为它们让我想起我正在修复这些东西的糟糕日子,我想在经历了这次恐怖之后感觉自己像个新手。我想每个人都会同意这是清除日志的正当理由:P。

小智 556

自维护方法是按大小或时间对日志进行真空吸尘。

只保留过去两天:

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

仅保留过去的 500 MB:

journalctl --vacuum-size=500M
Run Code Online (Sandbox Code Playgroud)

man journalctl 想要查询更多的信息。

  • 似乎这只会清除存档日志,而不是活动日志。我尝试在 `journalctl --vacuum-time=1s` 之前运行 `journalctl --flush --rotate`,它删除了更多的东西,尽管仍然不是所有的东西。 (36认同)
  • 不错的命令,但在 openSUSE 13.2(当前稳定版本)上对我不起作用。众所周知,Arch 在内核和用户程序方面通常处于最前沿,因此我推测真空选项可能最近已添加到 systemd 中,而只是没有沉淀到我的发行版中。在 Lennart 于 2014 年 12 月 10 日 http://techupdates.com/go/1002774 的公告中确认了该命令已添加到 systemd v218 中的事实。只需添加此评论,以防其他像我这样不在 Arch 上的人也有类似的问题。反正投了赞成票。 (15认同)
  • 在 Ubuntu 16.04 上的“systemd 229”版本中不起作用。`journalctl --vacuum-size=1K` 然后 `journalctl` 仍然显示超过 1K。它显示自上次启动以来的所有消息。 (8认同)
  • 文档对我来说似乎不太清楚。它是否始终保持设置为 2d(在您的示例中)?或者是从您运行命令时开始的 2d?也许我不明白这是如何工作的。 (3认同)
  • 不过要小心,我使用了 `sudo journalctl --vacuum-time=7d` 并且只剩下今天的日志......似乎是一个有问题的功能 (2认同)
  • @AlexanderMills 嗨亚历山大。如果有人知道“#”的意思是“作为 root”,他们当然知道系统管理任务总是需要特殊权限。此外,根据您的设置,您不一定必须使用`sudo`,例如您可以以root 身份工作。此外,它确实阻碍了您将粘贴命令直接复制到终端,特别是如果它们是多行的。当然,这也适用于以“$”开头的行。它从来都不是有用的,也不是美学的。而且由于有代码块,您甚至可以将事物识别为命令都没有问题。 (2认同)

Cal*_*leb 157

您通常不会自己清除日志。这是由 systemd 本身管理的,旧日志随着新数据的进入而轮换。正确的做法是安排 journald 只保留您感兴趣的数据。最常见的调整是总磁盘允许占用的空间。一旦它越过这个边界,它就会开始投掷旧条目以保持在这个值附近。

你可以这样设置/etc/systemd/journald.conf

SystemMaxUse=100M
Run Code Online (Sandbox Code Playgroud)

  • 好的,但也有不典型的情况。我知道他们中的大多数只是美学作为理由,但美学是人类的正当理由;)。 (16认同)
  • 要在一段时间后而不是在达到一定大小后清理日志,您可以设置参数“MaxRetentionSec”而不是“SystemMaxUse”。有关更多详细信息,请参阅`man journald.conf`。 (9认同)
  • 这可能不是典型的情况,但有时由于某些 systemd 的 bug 需要删除旧日志,例如 https://bbs.archlinux.org/viewtopic.php?pid=1173031#p1173031 (5认同)
  • @ŁukaszZaroda 在这种情况下,您将不得不定义“安全”。通常“我想吹走守护进程配置为保留的东西”与“安全”不兼容。如果你想强制它只是关闭服务并将日志文件清零。如果您希望它正常工作,您应该更好地定义问题中的参数。你说的“安全”是什么意思? (4认同)

Jan*_*hoł 135

迈克尔的回答缺少一件事:吸尘只会删除存档的日志文件,而不是活动的日志文件。要清除所有内容,您需要先旋转文件,以便将最近的条目移动到非活动文件中。

因此,删除所有条目的完整答案似乎是

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

(请注意,您不能将其合并为一个journalctl命令。)

顺便说一下,一些发行版已经配置了日志,以便将日志写入磁盘 ( /var/log/journal) 而其他发行版将日志保存在内存中 ( /run/log/journal)。我希望在某些情况下可能需要先使用journalctl --flush才能删除所有内容。

如果您--rotate的版本中没有,您可以使用--since参数来过滤条目:

--since "2019-01-30 14:00:00"
--since today
Run Code Online (Sandbox Code Playgroud)

  • 虽然我得到了其他答案的接近(长期战略)——问题很简单:你现在如何清除日志(也许你对当前任务的长期不感兴趣)。这在不做其他假设的情况下回答了这个问题,并为理解 journalctl 增加了其他重要价值。这应该是答案。 (11认同)
  • journalctl:无法识别的选项“--rotate” (5认同)
  • 最初的问题是“我如何为调试目的重置我的日志”。这是解决这个问题的唯一答案。我真的很高兴我找到了它。其余的是有趣的 journalctl 事实,但不是问题的答案。 (3认同)

小智 27

在 Arch linux 上,我得到的最接近的是:

  • 编辑 /etc/systemd/journald.conf 设置 SystemMaxUse=1M
  • 重启日志: sudo systemctl restart systemd-journald
  • 重置 SystemMaxUse=200M
  • 重新启动日志

在我的系统上,每个日志文件是 8MB,上面清除了除 3 之外的所有文件,使总大小达到 ~25MB。

我的用例是为 BTRFS 禁用 CoW(仅用于日志目录和子目录):sudo chattr +C /var/log/journal/*. 问题是,该属性仅在新创建的文件上设置,因此需要刷新日志。

  • 实际上不需要您的用例。在日志上禁用 CoW 的要点是它经常被写入。旧的旋转日志文件不是这种情况,它们只是坐在那里。 (5认同)

Mat*_*ion 21

由于--vacuum-time--vacuum-size没有为我做任何事情,我做了以下事情:

$ sudo find /var/log/journal -name "*.journal" | xargs sudo rm 
$ sudo systemctl restart systemd-journald
Run Code Online (Sandbox Code Playgroud)

这是不对的,但它奏效了。

  • 这是目前的正确答案。如果 journalctl 命令可以执行此操作,但它似乎无法执行,那就太好了。 (4认同)

Lan*_*nti 17

一种非常强力的清理整个日志的方法:

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

你也可以--vacuum-size像迈克尔提到的那样使用。

  • 没用。即使在运行“systemctl restart systemd-journald”之后,15 分钟前的条目仍然显示。 (5认同)

sti*_*tiv 9

--rotate 和 --vacuum-time=1s 在 CentOS 上对我不起作用。我能够像这样清除它:

sudo rm -rf /run/log/journal/*
Run Code Online (Sandbox Code Playgroud)

  • 在 Ubuntu Server 20.04 上,您提到的文件夹存在,但其中没有任何内容(`ls -lah /run/log/journal/`)。 (2认同)

小智 8

我之前的答案因“重复”而被删除。好吧,很抱歉在我之前的答案中不够清楚,但它与现有答案不同。所以这里有一个更详细的版本:

journalctl -m --vacuum-time=1s帮我解决了这个问题。请注意-m标志,它会合并您所有的日记,然后将它们清理干净。没有-m标志,它没有清理我的情况(在 CentOS-7 上)。

希望能帮助到你。