systemd日志轮转管理:让系统日志不占满磁盘
用过Linux的人都知道,系统运行久了,日志文件容易越积越多。特别是启用了systemd的系统,日志默认由journald收集并保存在内存或磁盘中,时间一长,可能悄悄吃掉几个GB的空间。这时候,就得靠systemd的日志轮转管理来控制局面。
日志存在哪儿?
systemd的日志由systemd-journald服务负责记录,默认情况下,日志会保存在/run/log/journal(临时存储)和/var/log/journal(持久存储)两个位置。如果/var/log/journal目录不存在,日志只存在内存里,重启就没了。想长期保留,得手动创建这个目录。
创建命令:
sudo mkdir -p /var/log/journal怎么开启日志轮转?
journald本身就有轮转机制,不需要额外装logrotate来处理它自己的日志。关键在于配置/etc/systemd/journald.conf这个文件。
打开配置文件:
sudo nano /etc/systemd/journald.conf常见控制大小的参数有这几个:
SystemMaxUse=:限制日志在磁盘上最多占用多少空间,比如设成100MSystemKeepFree=:留出多少空间不给日志用,防止磁盘被撑爆SystemMaxFileSize=:单个日志文件最大体积,用于触发轮转MaxRetentionSec=:日志最长保留时间,比如30天
举个实际例子:
[Journal]
SystemMaxUse=500M
SystemMaxFileSize=100M
MaxRetentionSec=30day改完后重启服务生效:
sudo systemctl restart systemd-journald查看当前日志占用情况
想知道现在日志占了多少空间,可以直接看:
journalctl --disk-usage输出类似这样:
Archived and active journals take up 230.4M in the file system.一眼就知道有没有超标。
手动清理旧日志
有时候想立刻腾点空间,可以按时间删:
# 只保留最近7天的日志
sudo journalctl --vacuum-time=7d或者按容量清理:
# 最多保留500M的日志
sudo journalctl --vacuum-size=500M这些命令会自动删除最老的日志文件,保留最新的,安全又省心。
避免日志爆炸的小建议
某些服务如果频繁报错,journald会一条条记下来,几分钟内生成上万条记录。比如某个定时任务失败重试,日志可能暴涨。这种时候,除了调低服务的日志级别,也可以在journald配置里加:
RateLimitIntervalSec=30s
RateLimitBurst=1000意思是每30秒最多记录1000条,超出的暂时丢掉,防止日志洪峰拖慢系统。
日志不是越全越好,合理轮转才是长久之计。把journald配置好,相当于给系统装了个自动清理的“垃圾桶”,既保留排查问题的能力,又不让磁盘告急。