服务器磁盘满清理无用日志:服务器磁盘满了如何安全清理无用日志
当服务器磁盘空间达到100%时,网站访问变慢、数据库写入失败甚至PHP无法创建临时文件。
最常见的原因就是日志文件持续增长没有清理。
本文会带零基础用户一步步完成服务器磁盘满清理无用日志的操作,确保安全且能真正释放空间。
先确认磁盘到底被什么占满
登录服务器后,首先用命令查看各分区使用情况:
df -h
输出中重点关注 / 或 /var 分区的 已用%。
如果超过90%,说明磁盘紧张。
下面定位大文件:
du -sh /var/log/* | sort -rh | head -10
这个命令会列出 /var/log 下占用空间最大的10个日志文件。
日志通常集中在这里,但也要检查 ~/.cache 或 Docker 容器日志等位置。
找到日志文件的具体位置和类型
除了 /var/log,常见的日志存储路径还有:
- Nginx:
/var/log/nginx/access.log和error.log - MySQL:
/var/log/mysql/或/var/lib/mysql/下的错误日志 - Tomcat:
/usr/local/tomcat/logs/下的catalina.out - 宝塔面板:
/www/wwwlogs/下的站点日志
用 find 命令按大小搜索所有日志:
find / -type f -name "*.log" -size +100M -exec ls -lh {} \; 2>/dev/null
这样能快速找到超过100MB的日志文件,方便决定清理目标。
安全删除日志的几种方法
1. 删除过期的日志文件
保留最近30天的日志,删除更旧的:
find /var/log -name "*.log" -mtime +30 -exec rm -f {} \;
注意:-mtime +30表示修改时间距现在超过30天。执行前建议先用-exec echo {} \;预览。
2. 用 truncate 清空文件而不是删除
如果日志正被进程写入,直接删除可能造成句柄泄漏,空间不释放。
更好的方式是截断文件:
truncate -s 0 /var/log/nginx/access.log
这个命令将文件内容清空,但文件本身还在,进程继续写入没问题。
3. 使用 logrotate 自动轮转
配置 /etc/logrotate.d/ 下的规则,让系统定期压缩和清理旧日志。
例如针对自定义应用:
/var/log/myapp/*.log {
daily
rotate 7
compress
missingok
notifempty
delaycompress
sharedscripts
postrotate
systemctl reload myapp
endscript
}
如果之前没有配置,建议先按上述手动清理,再设置 logrotate 避免未来再次满盘。
清理日志后必须做的验证
清理完成后运行:
df -h
查看磁盘已用空间是否下降,确保原本100%的磁盘有明显回收。
同时检查关键服务是否正常:
- 访问网站首页看是否返回正常状态码
- 查看
systemctl status nginx或对应服务 - 用
dmesg | tail检查是否有磁盘相关错误
如果发现空间没释放,可能是进程还在使用已删除的日志文件句柄。
此时重启服务即可释放:
systemctl restart nginx
常见问题与避坑提醒
Q:删除了日志文件但空间没变大?
A:文件被进程打开,句柄未释放。先用 lsof | grep deleted 查找,再重启相关进程或服务。
Q:误删了系统关键日志怎么办?
A:/var/log/auth.log、/var/log/syslog 等不要硬删,建议使用 truncate 或 logrotate 管理。已删除的可通过 touch 新建同名文件并重启服务。
Q:宝塔面板里日志怎么清理?
A:登录宝塔后台 -> 左侧“日志” -> 按日期清理站点日志,或直接清除 /www/wwwlogs/ 下的文件(推荐 truncate 方式)。
避坑核心: 不要 rm -rf /var/log/* 一锅端,务必先分析各文件大小和用途,优先使用 truncate 或配置文件控制的轮转方案。
定期执行本文的步骤,就能避免服务器磁盘满再次发生。
如果你在清理过程中遇到其他异常,欢迎在评论区留言,我会继续补充案例。