在 Linux 中清理旧日志文件,常见方式和做法如下,按安全程度和使用场景说明:
logrotate(推荐,自动清理)大多数 Linux 发行版默认使用 logrotate 管理日志。
查看配置:
cat /etc/logrotate.conf
ls /etc/logrotate.d/
示例(保留 7 天日志):
/var/log/myapp/*.log {
daily
rotate 7
compress
missingok
notifempty
}
手动执行:
logrotate -f /etc/logrotate.conf
✅ 优点:自动、安全、不会误删正在写的文件
find /var/log -name "*.log" -mtime +7 -delete
或先查看再删:
find /var/log -name "*.log" -mtime +7
⚠ 注意:
+7 表示 7天前/var/log 整个目录如果日志正在被程序写入,清空比删除更安全:
> /var/log/myapp.log
或:
truncate -s 0 /var/log/myapp.log
✅ 避免“文件删了但磁盘不释放”的问题
# 查看占用
journalctl --disk-usage
# 只保留最近 7 天
journalctl --vacuum-time=7d
# 限制最大 500MB
journalctl --vacuum-size=500M
配置文件:
/etc/systemd/journald.conf
SystemMaxUse=500M
docker system prune
或限制日志大小(/etc/docker/daemon.json):
{
"log-driver": "json-file",
"log-opts": {
"max-size": "100m",
"max-file": "3"
}
}
rm -rf /var/log/*| 场景 | 推荐方式 |
|---|---|
| 系统日志 | logrotate |
| systemd | journalctl --vacuum |
| 正在写日志 | truncate -s 0 |
| 旧文件 | find -mtime +N |
| Docker | 限制 max-size |
如果你能告诉我 具体日志路径或系统(CentOS / Ubuntu / Docker),我可以给你更精确的命令。