Linux 下清理 systemd 日志

Systemd 提供了自己的日志系统,称为 journal,其日志文件保存在 /var/log/journal 目录下。随着系统的长时间运行,该目录占用的空间会不断增长,默认情况下最高可达到 4G(硬盘容量较小时最高为系统总空间大小的 10%)。

如果硬盘容量较小或者可用空间紧张,可以考虑一下清理过期的 systemd 日志来释放空间。

手动清理

可以使用如下命令检查 systemd 日志所占用的硬盘总空间大小:

1
journalctl --disk-usage

实际清理之前建议先 rotate 一下(存档当前所有的活跃日志文件并重命名,后续日志将被写入到新创建的空文件中):

1
sudo journalctl --rotate

journalctl 命令提供了三种清理 systemd 日志的方式。第一种是清理指定时间之前的日志:

1
2
3
4
5
6
7
8
# 清理1天之前的日志
sudo journalctl --vacuum-time=1d

# 清理1小时之前的日志
sudo journactl --vacuum-time=1h

# 清理10秒之前的日志
sudo journalctl --vacuum-time=10s

第二种是限制日志占用的总空间大小(优先保留最近的日志):

1
2
3
4
5
# 限制systemd日志占用总空间不超过1G
sudo journalctl --vacuum-size=1G

# 限制systemd日志占用总空间不超过10M
sudo journalctl --vacuum-size=10M

第三种是限制日志文件的个数(优先保留最近的日志):

1
2
# 保留最近的3个日志文件
sudo journalctl --vacuum-files=3

持久配置

使用上面的命令可以手动清理 systemd 日志,但是如果真的有需要限制 systemd 日志占用空间大小的话,一直这么手动清理肯定是不现实的。实际上我们可以通过修改配置文件来让其自动限制所占用的空间大小。

编辑 /etc/systemd/journald.conf 文件,取消 SystemMaxUse 参数前面的注释,将其修改为我们想设置的 systemd 日志最大占用空间即可,例如限制其最大占用 256M 空间:

1
2
3
4
5
6
7
8
9
10
11
12
[Journal]
#Storage=auto
#Compress=yes
#Seal=yes
#SplitMode=uid
#SyncIntervalSec=5m
#RateLimitIntervalSec=30s
#RateLimitBurst=10000
SystemMaxUse=256M
#SystemKeepFree=
#SystemMaxFileSize=
#SystemMaxFiles=100

保存配置文件后需要重启 systemd-journald 服务才能生效:sudo systemctl restart systemd-journald