真正有效的日志与磁盘空间管理方案是分层处理:紧急释放+自动轮转+长期监控;核心用logrotate实现安全轮转,辅以清空占用日志、脚本兜底清理、分级保留策略及定期巡检。

定期清理系统日志和磁盘空间,核心不是“删得快”,而是“删得稳、控得住、不反弹”。直接 rm -rf 日志文件容易导致服务异常、空间不释放;靠人工定期登录操作又不可靠。真正有效的方案是分层处理:紧急释放 + 自动轮转 + 长期监控。
一、优先用 logrotate 实现自动日志轮转
logrotate 是 Linux 官方推荐的日志管理工具,无需重启服务就能安全压缩、归档、删除旧日志。
- 配置文件通常在
/etc/logrotate.conf或/etc/logrotate.d/下,按服务单独配置更灵活 - 一个典型配置示例(适用于自定义应用日志):
/var/log/myapp/*.log {<br> daily<br> rotate 14<br> compress<br> missingok<br> notifempty<br> create 640 root root<br> sharedscripts<br> postrotate<br> systemctl reload myapp.service > /dev/null 2>&1 || true<br> endscript<br> } - 含义:每天轮转一次,保留14天,自动压缩,空文件不处理,轮转后重载服务
- 测试配置是否生效:
sudo logrotate -d /etc/logrotate.conf(调试模式)或sudo logrotate -f /etc/logrotate.conf(强制执行一次)
二、临时释放空间的稳妥操作法
当磁盘已告警(如 df -h 显示根分区使用率 ≥95%),需快速释放空间,但不能硬删正在写入的文件。
- 清空而非删除:对仍在被进程占用的日志(如
/var/log/syslog),用重定向清空内容:sudo sh -c 'echo > /var/log/syslog',句柄保持,空间立即释放 - 安全删除旧文件:只删明确不再需要的归档日志,例如:
find /var/log -name "*.log.*" -mtime +30 -delete(删30天前的压缩归档) - 查大日志定位源头:
du -sh /var/log/* | sort -hr | head -10,重点关注journal、nginx、mysql等子目录 - systemd 日志可限制大小:
sudo mkdir -p /etc/systemd/journald.conf.d,新建rate-limit.conf,写入:[Journal]<br> SystemMaxUse=1G<br> SystemMaxFileSize=100M
然后sudo systemctl restart systemd-journald
三、用 cron + 脚本做兜底清理与巡检
logrotate 解决主流日志,但业务日志路径分散、格式不一,需脚本补充覆盖。
- 写一个轻量清理脚本(如
/usr/local/bin/clean-logs.sh):#!/bin/bash<br> LOG_DIRS=("/var/log/myapp" "/data/logs")<br> DAYS=15<br> for dir in "${LOG_DIRS[@]}"; do<br> [ -d "$dir" ] && find "$dir" -type f -name "*.log*" -mtime +$DAYS -exec rm -f {} \;<br> done<br> echo "$(date): cleanup done" >> /var/log/log-cleanup.log - 赋予执行权限:
chmod +x /usr/local/bin/clean-logs.sh - 加入定时任务:
crontab -e添加:0 2 * * * /usr/local/bin/clean-logs.sh(每天凌晨2点执行) - 同步加个简单巡检:
0 6 * * * df -h | grep -E '(100%|9[5-9]%)' && echo "ALERT: $(date)" | mail -s "Disk Alert" admin@example.com
四、区分日志类型,制定差异化保留策略
不是所有日志都该留7天——要按用途分级管理:
- 系统级日志(rsyslog、journald):建议保留14–30天,用于故障回溯
- Web服务日志(Nginx/Apache):访问日志可压缩保留30天,错误日志保留90天
- 数据库日志(MySQL error log、slow log):错误日志保留30天,慢查询日志按需保留7天
- 业务应用日志:由开发团队定义级别和周期,上线前必须明确日志路径、格式、滚动规则
- 敏感操作日志(如审计日志)应单独归档至外部存储,不保留在本地磁盘
不复杂但容易忽略:清理只是手段,关键在建立“生成—轮转—归档—销毁”的闭环机制。配置好 logrotate、设好 cron 脚本、定好保留策略,再配上每周一次的 df -h 快速巡检,基本就能把日志空间问题控制在日常节奏里。











