温馨提示×

如何清理linux旧日志

小樊
73
2026-09-20 18:37:22
栏目: 智能运维

在 Linux 系统中,清理旧日志(日志轮转和手动删除)是常见运维操作。下面按推荐方式 → 手动方式 → 自动化方式给你说明。


一、推荐方式:使用 logrotate(最安全)

大多数 Linux 发行版(CentOS / Ubuntu / Debian)都自带 logrotate。

1. 查看配置

cat /etc/logrotate.conf
ls /etc/logrotate.d/

2. 示例配置(/etc/logrotate.d/myapp)

/var/log/myapp/*.log {
    daily
    rotate 7
    compress
    missingok
    notifempty
    create 0644 root root
}

含义:

  • daily:每天轮转
  • rotate 7:保留 7 份
  • compress:压缩旧日志
  • missingok:文件不存在也不报错

3. 手动执行测试

logrotate -d /etc/logrotate.conf   # 测试(不实际执行)
logrotate -f /etc/logrotate.conf  # 强制执行

✅ 这是最推荐的方式,不会误删正在写入的日志


二、手动清理旧日志(小心使用)

1. 删除 N 天前的日志

find /var/log -name "*.log" -mtime +30 -delete

解释:

  • +30:30 天前
  • -delete:直接删除(慎用)

2. 只删压缩日志

find /var/log -name "*.log.*.gz" -mtime +30 -delete

3. 清空日志文件(不清文件本身)

> /var/log/messages

或

truncate -s 0 /var/log/messages

⚠️ 不要直接 rm 正在写入的日志文件,否则进程仍占用空间。


三、清理 systemd 日志(journalctl)

查看占用

journalctl --disk-usage

清理方式

# 保留最近 7 天
journalctl --vacuum-time=7d

# 限制总大小
journalctl --vacuum-size=500M

永久限制(/etc/systemd/journald.conf)

SystemMaxUse=500M
MaxRetentionSec=7day

然后:

systemctl restart systemd-journald

四、定时自动清理(crontab)

crontab -e

示例(每天凌晨清理 30 天前日志):

0 0 * * * find /var/log -name "*.log" -mtime +30 -delete

五、常见坑提醒

❌ 直接 rm 正在写入的日志
✅ 用 logrotate 或 truncate

❌ 删除 /var/log 整个目录
✅ 只删具体日志文件


如果你能告诉我:

  • 使用的 Linux 发行版
  • 日志路径(如 /var/log、/opt/app/logs)
  • 是否用 Docker / K8s

我可以给你一套更精确的清理方案。

0 踩