Linux磁盘满导致网站打不开,清理日志方法
网站突然打不开,SSH 能连上但网页报 500 或 502,多半是 Linux 磁盘被日志写满了。
本文面向零基础用户,从确认磁盘状态开始,到定位大文件、安全清理日志、验证网站恢复,每一步都给出可照做的命令和路径。
先确认是不是磁盘满了
登录服务器后,第一件事是查看磁盘使用率。
执行:
df -h
重点看 / 或 /www 挂载点的 Use% 列。
如果显示 100% 或接近 100%,基本可以确定是磁盘满导致网站无法写入缓存、会话或上传文件。
接着用 du 找出哪个目录占用最大:
du -sh /* 2>/dev/null | sort -rh | head -20
这条命令会列出根目录下占用最大的前 20 个目录。
如果服务器有 /www 或 /home 分区,也单独查一下:
du -sh /www/* 2>/dev/null | sort -rh | head -20
常见的大文件位置集中在 /var/log、/www/wwwlogs、/home/*/logs 以及 MySQL 的 binlog 目录。
安全清理系统日志
确认是日志占满后,不要直接 rm -rf 整个日志目录,否则可能影响正在运行的服务。
推荐用以下方式逐类清理。
清理 journal 日志
如果系统使用 systemd,journalctl 日志可能占用几个 GB。
先看占用:
journalctl --disk-usage
保留最近 3 天日志并限制总大小:
journalctl --vacuum-time=3d
journalctl --vacuum-size=200M
执行后再次用 df -h 确认释放效果。
清空而非删除正在写入的日志
对于 Nginx、Apache、MySQL 正在写入的 .log 文件,直接删除会导致服务继续写已删除的 inode,磁盘空间不会释放。
正确做法是清空内容:
> /www/wwwlogs/access.log
> /www/wwwlogs/error.log
或者用 truncate:
truncate -s 0 /var/log/nginx/access.log
这样文件保留,空间立即释放,服务无需重启。
处理 MySQL binlog
如果 MySQL 开启了 binlog,日志会持续增长。
先登录 MySQL 查看:
SHOW BINARY LOGS;
清理 7 天前的 binlog:
PURGE BINARY LOGS BEFORE DATE_SUB(NOW(), INTERVAL 7 DAY);
如果不需要 binlog,可在配置中注释 log-bin 并重启 MySQL,但生产环境建议保留并配置自动过期。
宝塔面板用户的操作路径
如果你用的是宝塔面板,可以不敲命令:
- 登录宝塔后台,点击左侧 文件,进入
/www/wwwlogs目录,按大小排序,找到最大的日志文件。 - 右键选择 清空内容,不要点删除。
- 左侧 软件商店 → 找到 Nginx 或 Apache → 设置 → 日志切割,开启按天切割并保留 7 天。
- 左侧 计划任务 添加一条 Shell 脚本任务,每天凌晨执行
find /www/wwwlogs -name "*.log" -mtime +7 -exec truncate -s 0 {} \;。
配置自动轮转,避免再次写满
临时清理只能救急,长期要靠 logrotate。
系统一般自带 /etc/logrotate.d/ 目录,为 Nginx 新建配置:
cat > /etc/logrotate.d/nginx << 'EOF'
/www/wwwlogs/*.log {
daily
rotate 7
missingok
notifempty
compress
delaycompress
sharedscripts
postrotate
[ -f /www/server/nginx/logs/nginx.pid ] && kill -USR1 $(cat /www/server/nginx/logs/nginx.pid)
endscript
}
EOF
测试配置是否生效:
logrotate -d /etc/logrotate.d/nginx
-d 是调试模式,只输出计划不实际执行。
确认无误后去掉 -d 再跑一次。
清理后验证网站是否恢复
释放空间后,按顺序检查:
- 再次执行
df -h,确认Use%降到 80% 以下。 - 重启 Web 服务:
systemctl restart nginx或宝塔面板中重启 Nginx。 - 浏览器访问网站,看是否正常打开。
- 查看错误日志尾部:
tail -20 /www/wwwlogs/error.log,确认没有新的磁盘写入错误。
如果网站仍打不开,检查 PHP 或 MySQL 是否因磁盘满崩溃,需要单独重启对应服务。
容易踩坑的几个地方
- 不要直接
rm正在写入的日志文件,空间不会释放,必须用> file或truncate。 - 清理前先确认日志没有审计或合规保留要求,必要时先备份再清。
du和df结果不一致时,通常是有进程持有已删除文件,用lsof | grep deleted排查。- 数据库 binlog 不要手动删除文件,必须用
PURGE命令,否则会导致主从同步异常。 - 如果
/var/log本身挂载在独立小分区,建议调整分区或把日志目录迁移到空间更大的分区。
遇到 Linux 磁盘满导致网站打不开时,按“确认磁盘 → 定位大文件 → 清空而非删除 → 配置轮转 → 验证恢复”的顺序处理,基本能解决大部分场景。
清理完记得把 logrotate 配上,否则过几天还会重演。