systemd-journald通过配置SystemMaxUse、SystemMaxFileSize等参数实现日志自动切割与大小控制,需启用持久化存储并重启服务生效,合理配置可防止磁盘占满并保留必要日志。

linux系统中日志切割通常有两种方式:一种是通过logrotate工具管理传统日志文件,另一种是使用systemd-journald服务自带的日志管理机制。本文重点说明如何利用systemd-journald进行日志切割与大小控制。
systemd-journald 日志切割原理
systemd-journald 是 systemd 的日志守护进程,它收集并存储系统启动到当前运行的服务日志。与传统的 syslog 不同,journald 将日志以二进制格式保存在 /var/log/journal/ 目录下(若启用持久化存储),并支持自动的日志轮转和空间限制。
其“切割”不是按时间或大小手动分割文件,而是通过配置最大磁盘占用、单个日志文件大小、保留策略等方式实现自动管理,旧日志会被自动删除或归档。
配置 journald 日志大小与轮转
编辑 journald 配置文件来控制日志行为:
配置文件路径: /etc/systemd/journald.conf
常用关键参数如下:
- SystemMaxUse=:设置日志在磁盘上最多占用的空间(如 100M、500M、1G)
- SystemKeepFree=:保留多少空间不被日志占用,防止磁盘写满
- SystemMaxFileSize=:单个日志文件的最大大小,达到后会创建新文件(即“切割”)
- MaxRetentionSec=:日志最长保留时间(如 1month、7day)
- MaxFileSec=:每个日志文件最多包含多长时间的数据(影响切割频率)
示例配置:
[Journal] SystemMaxUse=500M SystemMaxFileSize=100M MaxRetentionSec=1month MaxFileSec=1week
上述配置表示:
- 所有日志总大小不超过 500MB
- 单个日志文件最大 100MB,超过则生成新文件(实现切割)
- 日志最多保留一个月
- 每 1 周强制滚动一次日志文件
启用持久化日志存储
默认情况下,部分系统未开启持久化日志,重启后日志丢失。要实现长期管理和切割,需确保日志写入磁盘:
创建目录并赋权:
sudo mkdir -p /var/log/journal sudo systemctl touch /var/log/journal
journald 启动时检测到该目录存在,会自动将日志持久化保存至此。
重启服务并验证配置
修改配置后,需重启 journald 服务生效:
sudo systemctl restart systemd-journald
查看当前日志磁盘使用情况:
journalctl --disk-usage
输出示例:
Archived and active journals take up 48.2M in the file system.
也可用 journalctl --list-boots 查看已切割的 boot 日志记录。
基本上就这些。systemd-journald 的“切割”是自动的,依赖配置中的大小和时间策略,无需额外脚本。合理设置参数可避免日志占满磁盘,同时保留足够的排查信息。