如何清除journalctl


208

我在Google中找不到清除系统日志的任何安全方法。有谁知道安全可靠的方法吗?

假设我正在尝试某些东西,但日志中却堆满了各种错误消息。此外,我正在使用Conky在桌面上显示日记。我真的不想看到这些错误,因为它们让我想起了我正在修理此产品的糟糕一天,我想在经历过这种恐怖之后感觉像个新鲜人。我想每个人都会同意,这是清除日志:P的正当理由。

Answers:


289

自我维护方法是按大小或时间清理日志。

仅保留过去两天:

journalctl --vacuum-time=2d

仅保留过去的500 MB:

journalctl --vacuum-size=500M

man journalctl 欲获得更多信息。


11
好的命令,但是对openSUSE 13.2(当前的稳定版本)不起作用。众所周知,在内核和用户界面程序方面,Arch通常处于最前沿,因此我推测,真空选项可能最近已添加到系统中,而没有沉淀到我的发行版中。确认这里伦纳特对2014年12月10日公布的事实techupdates.com/go/1002774在systemd V218加入此命令。只是添加此评论,以防像我这样不在Arch中的其他人也有类似的问题。无论如何都支持。
Joshua Huber

我只是使用了'journalctl --vacuum-time = 1d'来解决新的日志消息未显示为'journalctl -f'的情况。显然,我的系统时间暂时向前跳了大约一天,然后恢复了,Journalctl使用了该将来时间的日志事件时间戳作为日志尾部。
user5071535

8
在Ubuntu 16.04上的版本“ systemd 229”中不起作用。journalctl --vacuum-size=1K然后journalctl仍然显示超过1K的方式。它显示自上次引导以来的所有消息。
Dan Dascalescu '16

18
看来这只会清除存档的日志,而不清除活动日志。我试图运行journalctl --flush --rotate之前journalctl --vacuum-time=1s,它去掉更多的东西,虽然仍然不能代表一切。
user60039

2
该文档对我来说似乎不太清楚。它是否始终设置为2d(在您的示例中)?还是从运行命令开始的2d?也许我不明白这是如何工作的。
泽西豆

84

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

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

SystemMaxUse=100M

11
好的,但是也有不典型的情况。我知道,其中大多数只是出于审美的原因,但是审美是人类的合法理由;)。
卢卡斯Zaroda

2
@ŁukaszZaroda在这种情况下,您将必须定义“安全”。通常,“我想删除守护程序配置为保留的内容”与“安全”不兼容。如果要强制执行此操作,只需关闭服务并将日志文件清零即可。如果您希望它正常运行,则应更好地定义问题中的参数。“安全”是什么意思?
Caleb 2014年

安全起见,我的意思是说清除后,它会照常工作,只是从新地方开始。
卢卡斯Zaroda

5
这可能不是典型的情况,但由于某些systemd的错误,有时有时需要删除旧日志,例如bbs.archlinux.org/viewtopic.php?pid=1173031#p1173031
diffycat 2014年

1
要在一段时间(而不是达到一定大小)后清除日志,可以设置参数MaxRetentionSec而不是SystemMaxUse。请参阅man journald.conf以获取更多详细信息。
joelostblom

51

迈克尔的答案缺少一件事:清理仅删除存档的日志文件,而不删除活动的日志文件。要清除所有内容,您需要先旋转文件,以便将最近的条目移至非活动文件。

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

journalctl --rotate
journalctl --vacuum-time=1s

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

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

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

--since "2019-01-30 14:00:00"
--since today

journalctl:无法识别的选项“ --rotate”
stiv

1
当我得到其他答案正在解决的问题(长期策略)时,问题很简单:您现在如何清除日志(也许您对当前任务的长期利益不感兴趣)。这无需做出其他假设即可回答该问题,并为理解journalctl增添了其他巨大价值。这应该是答案。
Marc

1
这是对我唯一有用的答案。谢谢!
Freedo

18

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

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

在我的系统上,每个日记文件为8MB,以上清除了除3个以外的所有文件,因此总大小约为25MB。

我用例被禁用头奶牛BTRFS(只是为杂志目录及子目录)sudo chattr +C /var/log/journal/*。问题是,该属性仅在新创建的文件上设置,因此需要刷新日志。


4
实际上不需要您的用例。在日记帐上禁用CoW的要点是它经常被写入。旧的循环日记文件不是这种情况,它们只是坐在那里。
Hjulle

1
我已经设置了SystemMaxUse=1K,重新启动了systemd-journald,但是journalctl仍然显示我想要消失的条目。平面文本文件的进展如何?
Dan Dascalescu

13

由于--vacuum-time并且--vacuum-size没有为我做任何事情,因此我执行了以下操作:

$ sudo find /var/log/journal -name "*.journal" | xargs sudo rm 
$ sudo systemctl restart systemd-journald

这是不对的,但确实有效。


在Debian Jessie上,路径为/run/log
同步

1
只有这帮助了我!
T.Todua '18

这是当前正确的答案。如果journalctl命令可以执行此操作,但它似乎无法执行,那就太好了。
凯文·利达

11

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

$ sudo journalctl --vacuum-time=1seconds

您也可以--vacuum-size像迈克尔一样使用。


5
没用 即使在运行后,仍然会显示15分钟前的条目systemctl restart systemd-journald
Dan Dascalescu '16

1
同样在这里。这对我也不起作用。我正在运行CentOS7。
泽西豆

5

在CentOS上,--rotate和--vacuum-time = 1s都不适合我。我能够这样清除它:

sudo rm -rf /run/log/journal/*

我在中找到2个十六进制名称的目录./journal。这些journalctl命令仅适用于最新的命令。因此,我不得不手动删除旧目录,这很安全。之后,我只限制了日记conf中的大小。
KeitelDOG

1
  1. 如果将来需要它,请备份它:
    cp /run/log/journal/<temp-string>/system.journal /mylog/dir/back/system.journal.bak

  2. 清除文件:
    cd /run/log/journal/<temp-string>/ >system.journal

  3. 检查以查看最新日志:
    journalctl -xe


1

journalctl -b将仅从最新启动中显示。您也可以使用-b -1-b -2等等。您的恐怖日子仍然存在,但是除非有必要,否则您不必看。


0

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

journalctl -m --vacuum-time=1s为我做了把戏。请注意该-m标志,它会合并您的所有日记,然后清理它们。没有该-m标志,就我而言(在CentOS-7上)它并没有清除任何内容。

希望能帮助到你。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.