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

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

评论

这是寻找清除日记帐分录的方式时最重要的搜索结果。但是,下面的答案都无法真正回答问题,因为它们要么删除旧日志,要么删除所有日志。它们都与清除最近或特定的日志无关。我在unix.stackexchange.com/questions/272662/…上发布了删除特定日志条目的指南。

#1 楼

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

仅保留过去两天:

journalctl --vacuum-time=2d


仅保留过去500 MB:

journalctl --vacuum-size=500M


man journalctl了解更多信息。

评论


好的命令,但是对openSUSE 13.2(当前的稳定版本)不起作用。众所周知,在内核和用户界面程序方面,Arch通常处于最前沿,因此我推测,真空选项可能最近已添加到系统中,而没有沉淀到我的发行版中。在Lennart在2014年12月10日的公告中,确认了以下事实:在systemd v218中添加了此命令。只是添加此注释,以防像我这样不在Arch上的其他人也有类似的问题。无论如何都支持。

–约书亚·胡贝尔(Joshua Huber)
2015年4月23日在0:33



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

– Dan Dascalescu
16-9-10下午4:23

看来这只会清除存档的日志,而不清除活动日志。我尝试在journalctl --vacuum-time = 1s之前运行journalctl --flush --rotate,它删除了更多内容,尽管仍然不是全部。

–user60039
17-2-7在19:42



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

–泽西豆
17年8月3日在1:49

不过要小心,我使用了sudo journalctl --vacuum-time = 7d,只留下了今天的日志...好像是个越野车功能

– EarthMind
19年4月15日在19:57

#2 楼

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

您可以在/etc/systemd/journald.conf中进行设置,如下所示:

SystemMaxUse=100M


评论


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

–ŁukaszZaroda
14年6月27日在12:08

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

–卡莱布
14年6月27日在12:17

出于安全考虑,我的意思是说清除后,它会照常工作,只是从新地方开始。

–ŁukaszZaroda
2014年6月27日12:19

这可能不是典型的情况,但有时由于某些systemd的错误(例如bbs.archlinux.org/viewtopic.php?pid=1173031#p1173031

–anlar
2014年6月27日15:57

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

– joelostblom
18 Mar 29 '18 at 13:08

#3 楼

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

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

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
18-10-7在12:22

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

– Marc
18-10-20在15:39

最初的问题是“如何为调试目的重置日志”。这是解决该问题的唯一答案。我很高兴我发现了它。其余的是有趣的journalctl类事实,但不是问题的答案。

–特拉维斯·格里格斯(Travis Griggs)
19-10-25在19:08

您将如何为特定服务而不是所有服务指定此名称?我想保留所有服务的日志,同时清除一项特定服务的日志。

–Lonniebiz
8月2日12:20

@Lonniebiz如果您有新问题,请单独提问,谢谢!

– Jeff Schaller♦
10月23日20:10

#4 楼

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


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

重置SystemMaxUse = 200M
重新重启日志

在我的系统上,每个日志文件均为8MB,以上内容清除了除3个以外的所有文件,因此总大小约为25MB。 br />
我的用例是禁用BTRFS的CoW(仅用于日记目录和子目录):sudo chattr +C /var/log/journal/*。问题在于,该属性仅在新创建的文件上设置,因此需要刷新日志。

评论


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

– Hjulle
15年3月31日在10:03

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

– Dan Dascalescu
2016年9月10日下午4:18

#5 楼

由于--vacuum-time--vacuum-size对我没有任何帮助,因此我执行了以下操作:

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


这不对,但是有效。

评论


在Debian Jessie上,路径为/ run / log。

–同步
18年2月12日在18:23

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

–凯文·莱达(Kevin Lyda)
19-09-26在10:43

某些程序无法正确处理其日志,这可能会破坏它们

–Faissaloo
19/12/26在13:42

#6 楼

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

评论


没用即使在运行systemctl重新启动systemd-journald之后,仍会显示15分钟前的条目。

– Dan Dascalescu
16年9月10日在4:15

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

–泽西豆
17年8月3日在1:55

#7 楼

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

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


评论


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

–KeitelDOG
19年2月19日在20:40

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

–Lonniebiz
8月2日12:25

在Ubuntu上,目录似乎是/ var / log / journal / *。

–Eerik Sven Puudist
11月15日20:32

#8 楼

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

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

希望它会有所帮助。

#9 楼

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

#10 楼


如果以后需要它,请备份:cp /run/log/journal/<temp-string>/system.journal /mylog/dir/back/system.journal.bak
清除文件:cd /run/log/journal/<temp-string>/
>system.journal
检查以查看最新日志:journalctl -xe


评论


用cd命令清除文件?

– Alexis Wilke
11月4日21:39

#11 楼

sudo journalctl --vacuum-files 1