为什么需要清理日志?
- 防止磁盘空间被占满
- 提高系统性能
- 便于日志管理和查找
两种日志系统的清理方法
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