Linux 日志清理指南

185 阅读2分钟

为什么需要清理日志?

  • 防止磁盘空间被占满
  • 提高系统性能
  • 便于日志管理和查找

两种日志系统的清理方法

1. 传统日志清理 (/var/log)

1.1 配置 logrotate:

  • 创建配置文件

sudo nano /etc/logrotate.d/custom_logs

  • 添加以下内容
/var/log/*.log {
    size=10M            # 当日志达到10M时进行轮换
    rotate 2            # 保留2个归档文件
    compress           # 压缩旧的日志文件
    missingok         # 如果日志丢失,不报错
    notifempty        # 如果日志为空,不轮换
    create 0644 root root  # 创建新日志文件的权限和所有者
    dateext           # 使用日期作为归档文件的扩展名
}

1.2 创建清理脚本:

  • 创建清理脚本文件 sudo nano /usr/local/bin/cleanup_logs.sh
  • 添加以下内容
#!/bin/bash
# 删除7天前的压缩日志文件
find /var/log -name "*.gz" -type f -mtime +7 -delete
​
# 删除30天前的日志文件
find /var/log -name "*.log.*" -type f -mtime +30 -delete
​
# 清空大于50M的当前日志文件
for logfile in $(find /var/log -type f -size +50M); do
    echo "" > "$logfile"
done
  • 强制执行日志轮换 /usr/sbin/logrotate -f /etc/logrotate.conf

2. Systemd 日志清理

2.1修改配置文件:

  • 编辑 journald 配置 sudo nano /etc/systemd/journald.conf
  • 添加以下配置
[Journal]
SystemMaxUse=100M      # 日志总体积上限
SystemMaxFileSize=20M  # 单个日志文件大小上限
MaxRetentionSec=2592000  # 日志保留时间(30天)
Compress=yes           # 启用压缩
Storage=persistent     # 持久化存储
ForwardToSyslog=yes    # 转发到 syslog

2.2 常用清理命令:

# 限制日志总大小为100M
journalctl --vacuum-size=100M
​
# 删除30天前的日志
journalctl --vacuum-time=30d

3. 自动化设置

  • 设置脚本执行权限 sudo chmod +x /usr/local/bin/cleanup_logs.sh
  • 编辑定时任务 sudo crontab -e
  • 添加以下内容(每天凌晨2点和3点执行清理)
0 2 * * * /usr/local/bin/cleanup_logs.sh
0 3 * * * journalctl --vacuum-size=100M

4. 监控命令

# 查看整个日志目录的大小
du -sh /var/log/
​
# 查看所有日志文件的详细大小,并按大小排序
find /var/log -type f -exec du -sh {} ; | sort -hr
​
# 查看 systemd 日志占用空间
journalctl --disk-usage

5. 注意事项

1. 备份重要日志:
# 创建带时间戳的备份文件
sudo tar -czf /home/backup_logs_$(date +%Y%m%d).tar.gz /var/log/
​
2. 定期检查清理效果:
# 检查日志目录大小
du -sh /var/log/
# 检查 journal 大小
journalctl --disk-usage
​
3. 重启相关服务:
# 重启 journald 服务(配置修改后)
sudo systemctl restart systemd-journald
​
4. 查看最近的日志确保系统正常:
# 查看最近50条系统日志
journalctl -n 50
​