如何清除 Systemd 日志日志

本快速教程向您展示了两种从 Linux 系统中清除 systemd 日志日志的方法。

系统日志 是 systemd 自己的日志系统。 它相当于 init 系统中的 syslog。 它为各种 systemd 服务收集和存储内核日志数据、系统日志消息、标准输出和错误。

具有 systemd 的 Linux 机器将日志写入 /var/log/journal 目录。 如果您还记得 Linux 目录结构,/var 就是存储系统日志的位置。

您可以使用 less 命令或使用 journalctl 命令手动查看日志文件。 要查看所有最新日志,请使用带有 reverse 选项的命令。

journalctl -r

日志记录的问题是,随着时间的推移,它开始变大。 如果您检查 Linux 中的磁盘空间,您会发现有时会占用几 GB 的空间。

让我向您展示如何清理 systemd 日志日志并释放 Linux 系统上的磁盘空间。

清除 systemd 日志日志

首先使用 du 命令检查日志日志占用的空间:

du -sh /var/log/journal/

您还可以将 journalctl 命令用于相同的任务:

journalctl --disk-usage

这两个命令应该给出大致相同的结果:

[email protected]:~$ journalctl --disk-usage
Archived and active journals take up 1.6G in the file system.

[email protected]:~$ sudo du -sh /var/log/journal/
1.7G	/var/log/journal/

现在您知道日志日志占用了多少空间,您可以决定是否要清除日志。 如果您决定清除日志日志,让我向您展示几种方法。

您当然可以使用 rm 命令删除日志文件夹中的文件,但我不建议这样做。 journalctl 命令为您提供了处理旧日志的正确方法。

您应该做的第一件事是轮换日志文件。 这会将当前活动的日志日志标记为存档并创建新的日志。 这是可选的,但这样做是一个好习惯。

sudo journalctl --rotate

现在您有三种方法可以清除旧的日志日志。 您删除早于特定时间的日志或删除较旧的日志文件,以便将总日志大小限制为预定义的磁盘空间或限制日志文件的数量。 让我们看看如何使用这三种方法。

1. 清除超过 x 天的日志

请记住,日志对于审计目的很重要,因此您不应同时删除所有日志。 假设您希望仅保留两天的日志历史记录。 要删除超过两天的所有条目,请使用以下命令:

sudo journalctl --vacuum-time=2d

输出可能如下所示:

Vacuuming done, freed 1.6G of archived journals from /var/log/journal/1b9ab93094fa4978beba80fd3c48a18c

您还可以更改以小时为单位(如 2h)、以分钟为单位(如 2m)、以秒为单位(如 2s)的提供时间范围。 如果你想要更大的时间单位,你可以 2 周,2 个月也可以。

2. 将日志限制在一定的大小

另一种方法是限制日志大小。 这样,它将删除日志日志文件,直到日志日志占用的磁盘空间低于您指定的大小。

sudo journalctl --vacuum-size=100M

这会将日志大小减少到大约 100 MB。

Vacuuming done, freed 40.0M of archived journals from /var/log/journal/1b9ab93094fa4978beba80fd3c48a18c.

您可以用 G 指定 GB 大小,用 M 指定 MB,用 K 指定 KB 等。

3.限制日志文件数量

第三种方式是限制日志文件的数量。 journalctl 通常有系统和用户的日志文件。 随着日志变旧,它们被归档在各种文件中。

您可以限制归档日志文件的数量。 假设您只想拥有五个日志文件。

journalctl --vacuum-files=5

它将删除较旧的存档日志文件,只留下指定数量的日志文件。

Deleted archived journal /var/log/journal/1b9ab93094fa4978beba80fd3c48a18c/[email protected]5988c0982.journal (8.0M).
Deleted archived journal /var/log/journal/1b9ab93094fa4978beba80fd3c48a18c/[email protected]9747a2ebd5a3.journal (48.0M).
Deleted archived journal /var/log/journal/1b9ab93094fa4978beba80fd3c48a18c/[email protected]7a32024d0.journal (48.0M).
Vacuuming done, freed 104.0M of archived journals from /var/log/journal/1b9ab93094fa4978beba80fd3c48a18c.

自动清除旧日志文件 [Requires intermediate knowledge of command line]

您刚才所做的将暂时清除日志文件。 一个月后,日志将再次增加。 您可以使用上述方法之一手动清洁它们。 但这是一项乏味的任务,您可能不记得经常这样做。

好消息是您可以将 systemd 配置为自动处理旧日志文件。

journalctl 的配置文件位于 /etc/systemd/journald.conf。 有一些设置被注释掉了。 注释行基本上表示这些设置参数的默认值(即使它们被注释掉)。

您可以更改其中一些默认设置以自动清理日志文件。

您可能想要更改以下设置:

环境描述
系统最大使用最大磁盘空间日志可以占用
系统最大文件大小单个日志文件的最大大小
系统最大文件最大日志文件数

注意力!

请注意,在编辑配置文件时应该小心。 您必须习惯使用基于终端的文本编辑器,如 Vim、Emacs 或 Nano,这样您在编辑 conf 文件时就不会犯愚蠢的错误。

我建议先备份配置文件:

cp /etc/systemd/journald.conf /etc/systemd/journald.conf.back

现在,您应该取消注释(删除行首的 #)您要使用的设置。 为了 example,我想将日志文件占用的最大磁盘空间限制为 250 MB。

您必须使用 Vim 或其他基于终端的编辑器才能编辑此配置文件。 这是编辑文件后的样子。

#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.
#
# Entries in this file show the compile time defaults.
# You can change settings by editing this file.
# Defaults can be restored by simply deleting this file.
#
# See journald.conf(5) for details.

[Journal]
#Storage=auto
#Compress=yes
#Seal=yes
#SplitMode=uid
#SyncIntervalSec=5m
#RateLimitIntervalSec=30s
#RateLimitBurst=1000
SystemMaxUse=250M
#SystemKeepFree=
#SystemMaxFileSize=
#SystemMaxFiles=100

请记住,编辑配置文件后,您应该加载更改:

sudo systemctl restart systemd-journald

journald.conf 文件可用于进一步调整 journalctl 设置。 您甚至可以设置想要查看的日志级别(信息、调试、错误等)。 如果您也想更改这些设置,这取决于您。

我希望你喜欢这个清除 systemd 日志文件的技巧。 如果您有任何问题或建议,请在下面发表评论。