小皮面板日志文件过大可以直接删除吗
学完这篇,你能分清小皮面板里哪些日志可以直接删、哪些删了会出故障,并学会用正确姿势清空正在被写入的日志文件,让磁盘空间真正释放出来。
第一步:先找到日志到底堆在哪
这一步要确认是哪个目录占了空间,避免删错地方。以小皮面板 Linux 版和 phpStudy v8.1(Windows 版)为例:
- 小皮面板 Linux 版默认装在
/www/server/panel,面板自身日志在/www/server/panel/logs/,网站访问日志在/www/wwwlogs/,Nginx 日志在/www/server/nginx/logs/,MySQL 数据与日志在/www/server/data/。 - phpStudy v8.1 Windows 版默认装在
D:\phpstudy_pro(也可能是 C 盘),面板日志在D:\phpstudy_pro\logs\,Nginx 日志在D:\phpstudy_pro\Extensions\Nginx1.15.11\logs\,MySQL 日志在D:\phpstudy_pro\Extensions\MySQL5.7.26\data\。
登录 SSH 或面板左侧「终端」,执行:
du -sh /www/wwwlogs /www/server/panel/logs /www/server/data
ls -lh /www/wwwlogs
du -sh 看目录总大小,ls -lh 看单个文件大小,找到几百 MB 甚至几个 GB 的 .log 文件。
第二步:判断哪些能删,哪些不能碰
这一步决定你的删除清单。结论是:纯文本日志基本都能删,数据库核心文件一个都不能动。
可以放心清空的:*.log 结尾的访问日志、错误日志、面板操作日志、Nginx 的 access.log / error.log、MySQL 的 slow.log、error.log。
不能直接删的:MySQL 的 ibdata1、ib_logfile0、ib_logfile1、mysql-bin.000001 这类二进制日志(要用 SQL 命令清理)、主从复制用的 relay-log、Nginx 的 nginx.pid、面板自身的数据库文件。
注意:最常见的坑是直接
rm -f access.log。文件被 Nginx 进程一直打开着,rm 只是删掉了目录项,磁盘空间不会释放,df -h看起来还是满的,必须重启服务才恢复。所以不要用 rm,要用「清空」。
第三步:用清空代替删除(推荐做法)
这一步做完,文件大小归零、磁盘空间立刻回收,而且不用重启服务。三种方式按习惯选一种:
方式一:命令行清空(最快)
truncate -s 0 /www/wwwlogs/*.log
或者:
echo "" > /www/wwwlogs/access.log
方式二:面板文件管理器
登录小皮面板 → 左侧菜单「文件」→ 地址栏输入 /www/wwwlogs 回车 → 找到目标 .log 文件 → 右键选择「编辑」→ 全选内容删除 → 点「保存」。文件内容清空,大小变成 0。
方式三:清理 MySQL 二进制日志(只能这样删)
mysql -uroot -p -e "PURGE BINARY LOGS BEFORE NOW();"
长期方案是改 my.cnf,加上 expire_logs_days = 7,让 binlog 自动过期。
注意:清空前确认没有正在做数据恢复、主从同步的操作,否则日志里的记录丢了会排查不了问题。
第四步:配置自动切割,防止再次爆盘
这一步让日志以后自动轮转,不用你天天盯。Linux 上用 logrotate,新建 /etc/logrotate.d/xp-logs:
/www/wwwlogs/*.log {
daily
rotate 7
missingok
notifempty
copytruncate
}
copytruncate 是关键参数,它复制后截断原文件,不需要重启 Nginx。
不想敲配置文件,可以用面板:左侧「计划任务」→「添加任务」→ 任务类型选「Shell 脚本」→ 执行周期选「每天」→ 脚本内容填 truncate -s 0 /www/wwwlogs/*.log → 保存。
Windows 版 phpStudy 可以用「任务计划程序」创建基本任务,触发器设为每天,操作填 cmd /c del /q D:\phpstudy_pro\logs\*.log。
第五步:验证空间是否真的释放
这一步确认清理生效。执行:
df -h
ls -lh /www/wwwlogs
对比清理前后的 Use%,如果数值下降了,说明清空成功;如果文件大小变成 0 但 df -h 没变化,说明有进程还占着已删除的文件句柄,用 lsof | grep deleted 查出来,然后重启对应服务。
小结
- 日志文件本身可以直接清空,但不能用
rm删正在被写入的文件,否则磁盘空间不释放。 - 正确做法是
truncate -s 0 文件名或echo "" > 文件名,面板「文件」模块里编辑保存为空也可以。 - MySQL 的
ibdata1、ib_logfile*、relay-log属于数据文件,不能当日志删;binlog 要用PURGE BINARY LOGS清理。 - 用 logrotate 的
copytruncate或面板「计划任务」做每日自动清空,一劳永逸。 - 清理后一定用
df -h验证,空间没降就查lsof | grep deleted。
原文链接:https://www.gj0.com/thread-1124.html
转载请注明出处并保留本声明;内容仅代表作者观点,与本站立场无关。若本文涉嫌侵权,请联系本站处理。