如何清除 Systemd 日志
本快速教程向您展示了从 Linux 系统中清除 systemd 日志的两种方法。
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
这两个命令应该给出大致相同的结果:
abhishek@linux:~$ journalctl --disk-usage
Archived and active journals take up 1.6G in the file system.
abhishek@linux:~$ 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/system@d9fbc18533be4cb69483adf2a61505ac-00000000001e0bba-00059745988c0982.journal (8.0M).
Deleted archived journal /var/log/journal/1b9ab93094fa4978beba80fd3c48a18c/user-1000@f571e91e5c6748a8a74666a448df78dd-00000000001e21d4-00059747a2ebd5a3.journal (48.0M).
Deleted archived journal /var/log/journal/1b9ab93094fa4978beba80fd3c48a18c/system@d9fbc18533be4cb69483adf2a61505ac-00000000001e2414-00059747a32024d0.journal (48.0M).
Vacuuming done, freed 104.0M of archived journals from /var/log/journal/1b9ab93094fa4978beba80fd3c48a18c.
自动清除旧日志文件 [需要中级命令行知识]
您刚才所做的只是暂时清理日志文件。一个月后,日志数量将再次增加。您可以使用上述方法之一手动清理它们。但这是一项繁琐的任务,您可能不会记得定期执行此操作。
好消息是您可以配置 systemd 来自动处理旧日志文件。
journalctl 的配置文件位于 /etc/systemd/journald.conf。有些设置被注释掉了。注释掉的行基本上表示这些设置参数的默认值(即使它们被注释掉了)。
您可以更改其中一些默认设置来自动清理日志文件。
您可能想要更改以下设置:
环境 | 描述 |
---|---|
系统最大使用量 | 日志占用的最大磁盘空间 |
系统最大文件大小 | 单个日志文件的最大大小 |
系统最大文件数 | 最大日志文件数 |
注意力!
请注意,编辑配置文件时应小心谨慎。您必须熟练使用基于终端的文本编辑器(如 Vim、Emacs或 Nano),以免在编辑配置文件时犯下愚蠢的错误。
我建议先备份配置文件:
cp /etc/systemd/journald.conf /etc/systemd/journald.conf.back
现在,您应该取消注释(删除行首的 #)要使用的设置。例如,我想将日志文件占用的最大磁盘空间限制为 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 日志文件的技巧。如果您有任何问题或建议,请在下面发表评论。