在 Linux 上“清理旧日志”通常分几种情况,下面按常见场景给你最实用的方法。
journalctl(systemd 日志)如果你用的是 CentOS 7+/Ubuntu 16.04+:
# 查看日志占用
journalctl --disk-usage
# 只保留最近 7 天
sudo journalctl --vacuum-time=7d
# 只保留 500MB
sudo journalctl --vacuum-size=500M
✅ 推荐:在 /etc/systemd/journald.conf 里限制大小
SystemMaxUse=500M
然后重启:
sudo systemctl restart systemd-journald
logrotate(最标准方式)大多数日志(/var/log/*)都由它管理。
# 手动执行一次
sudo logrotate -f /etc/logrotate.conf
# 查看配置
ls /etc/logrotate.d/
示例(/etc/logrotate.d/nginx):
/var/log/nginx/*.log {
daily
missingok
rotate 7
compress
delaycompress
notifempty
}
# 删除 /var/log 下 30 天前的 .log
sudo find /var/log -name "*.log" -mtime +30 -delete
⚠️ 不要直接 rm 正在写入的日志,否则磁盘不释放。
# 清空而不是删除
sudo truncate -s 0 /var/log/xxx.log
或:
sudo > /var/log/xxx.log
docker system df
/etc/docker/daemon.json:
{
"log-driver": "json-file",
"log-opts": {
"max-size": "100m",
"max-file": "3"
}
}
重启 Docker:
sudo systemctl restart docker
sudo find /var/lib/docker/containers -name "*.log" -mtime +7 -delete
journalctl --vacuum-time=7dlogrotate -ftruncate 正在写的日志如果你能告诉我:
我可以给你更精确的命令。