应采用“轮转+归档+自动清理”策略,首选系统级工具logrotate;配置需启用size触发、rotate保留数量、postrotate通知服务重开日志,并配合journald磁盘限额管理。

日志太大不能直接删,一删可能中断服务、丢失关键信息。核心思路是“轮转+归档+自动清理”,logrotate 是最稳妥、系统级支持的标准方案。
确认 logrotate 已启用并检查当前配置
大多数 Linux 发行版(如 CentOS、Ubuntu)默认已安装 logrotate,它靠 /etc/cron.daily/logrotate 定时触发,无需手动启停服务。
- 查看主配置:cat /etc/logrotate.conf,重点关注 weekly/rotate 4/create/dateext/compress 等基础策略
- 查看应用专属配置:ls /etc/logrotate.d/(如 nginx、rsyslog、tomcat),它们会覆盖主配置中的同名项
- 快速检查某日志是否被管理:grep -r "/var/log/nginx/access.log" /etc/logrotate.d/
按大小或时间触发轮转(推荐 size + rotate 组合)
仅靠 daily/weekly 不够灵活——流量突增时单日日志就超 10G,等不到第二天就爆盘。应优先用 size 触发,更主动可控。
- 示例(Nginx 访问日志):
/var/log/nginx/*.log {
size 100M
rotate 14
compress
delaycompress
dateext
dateformat .%Y%m%d
missingok
notifempty
sharedscripts
postrotate
systemctl kill -s USR1 nginx 2>/dev/null || true
endscript
} - size 100M:日志文件达到 100MB 立即轮转,不等时间周期
- rotate 14:最多保留 14 个归档(含压缩后),超出的自动删除
- postrotate 中发送 USR1 信号,通知 Nginx 重新打开新日志文件(避免写入中断)
验证配置并立即执行(应急释放空间)
改完配置别急着等 cron,先测试再强转,尤其磁盘已满时。
- 语法与逻辑检查:logrotate -d /etc/logrotate.d/nginx(-d 是 debug 模式,只模拟不执行)
- 强制立即轮转:logrotate -f /etc/logrotate.d/nginx,执行后原日志被重命名(如 access.log-20260308),新文件自动创建
- 观察效果:ls -lh /var/log/nginx/ 查看是否生成带日期的归档,原日志是否变为空或变小
配合 systemd-journald 限制二进制日志总量
如果使用 journalctl 查看日志,/run/log/journal/ 或 /var/log/journal/ 下的二进制日志也可能撑爆磁盘,需单独管控。
- 编辑:sudo nano /etc/systemd/journald.conf
- 取消注释并设置:
SystemMaxUse=512M
SystemMaxFileSize=128M
MaxRetentionSec=2week - 重启生效:sudo systemctl restart systemd-journald
- 立即清理旧条目:sudo journalctl --vacuum-size=512M 或 --vacuum-time=2weeks










