温馨提示×

linux怎么清理旧日志

小樊
60
2026-09-02 14:20:05
栏目: 智能运维

在 Linux 上“清理旧日志”通常分几种情况,下面按常见场景给你最实用的方法。


一、用系统自带工具(推荐,最安全)

1. 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

2. 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
}

二、手动清理旧日志文件

1. 删除 N 天前的日志

# 删除 /var/log 下 30 天前的 .log
sudo find /var/log -name "*.log" -mtime +30 -delete

⚠️ 不要直接 rm 正在写入的日志,否则磁盘不释放。


2. 正确清空正在写入的日志

# 清空而不是删除
sudo truncate -s 0 /var/log/xxx.log

或:

sudo > /var/log/xxx.log

三、Docker 日志清理(常见坑)

查看占用

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

四、一次性清理建议(安全顺序)

  1. journalctl --vacuum-time=7d
  2. logrotate -f
  3. truncate 正在写的日志
  4. 配置自动清理(防再次发生)

如果你能告诉我:

  • 系统版本(CentOS / Ubuntu / Debian)
  • 日志位置(/var/log?Docker?应用日志?)

我可以给你更精确的命令

0