在 Linux 系统中,清理旧日志(日志轮转和手动删除)是常见运维操作。下面按推荐方式 → 手动方式 → 自动化方式给你说明。
logrotate(最安全)大多数 Linux 发行版(CentOS / Ubuntu / Debian)都自带 logrotate。
cat /etc/logrotate.conf
ls /etc/logrotate.d/
/var/log/myapp/*.log {
daily
rotate 7
compress
missingok
notifempty
create 0644 root root
}
含义:
daily:每天轮转rotate 7:保留 7 份compress:压缩旧日志missingok:文件不存在也不报错logrotate -d /etc/logrotate.conf # 测试(不实际执行)
logrotate -f /etc/logrotate.conf # 强制执行
✅ 这是最推荐的方式,不会误删正在写入的日志
find /var/log -name "*.log" -mtime +30 -delete
解释:
+30:30 天前-delete:直接删除(慎用)find /var/log -name "*.log.*.gz" -mtime +30 -delete
> /var/log/messages
或
truncate -s 0 /var/log/messages
⚠️ 不要直接 rm 正在写入的日志文件,否则进程仍占用空间。
journalctl --disk-usage
# 保留最近 7 天
journalctl --vacuum-time=7d
# 限制总大小
journalctl --vacuum-size=500M
SystemMaxUse=500M
MaxRetentionSec=7day
然后:
systemctl restart systemd-journald
crontab -e
示例(每天凌晨清理 30 天前日志):
0 0 * * * find /var/log -name "*.log" -mtime +30 -delete
❌ 直接 rm 正在写入的日志
✅ 用 logrotate 或 truncate
❌ 删除 /var/log 整个目录
✅ 只删具体日志文件
如果你能告诉我:
/var/log、/opt/app/logs)我可以给你一套更精确的清理方案。