应启用宝塔日志切割并搭配自定义清理脚本:先确认切割功能开启且定时任务正常,再用find命令安全删除超期归档日志,避免手动删除导致服务异常。

宝塔面板里日志越积越多,磁盘快满了怎么办
直接删 /www/wwwlogs 下的文件最危险——Nginx/Apache 会因日志句柄失效报错,甚至导致网站 502。宝塔自带的「日志切割」功能默认只保留 30 天,但若站点多、访问量大,30 天也足以塞满几十 GB。真正有效的做法是:用宝塔的切割机制 + 自定义清理脚本双控,而不是手动 rm -rf。
启用并验证宝塔日志切割是否真在运行
很多人以为开了「定时切割」就万事大吉,其实常因权限或路径配置失效。先确认关键点:
-
宝塔后台 → 网站 → 设置 → 日志 → 启用日志切割必须勾选,且「保留天数」设为合理值(如 7 或 15,别盲目填 30) - 切割实际由系统定时任务触发:
crontab -l | grep bt应看到类似0 0 * * * python /www/server/panel/py/cut_logs.py的条目 - 检查切割后文件是否生成:
ls -lt /www/wwwlogs/your-site.com-*.log—— 正常会有带日期后缀的归档文件,原your-site.com.log应被清空而非删除
如果没归档文件,大概率是 cut_logs.py 执行失败(常见于 Python 环境变更或日志路径含中文)。
写一个安全可靠的日志清理脚本,绕过宝塔限制
宝塔不提供「按大小清理」或「跨站点统一清理」,所以需要补一脚本。核心原则:只删已归档、且超过保留期的 *.log 文件,绝不碰正在写的主日志。
#!/bin/bash # 保存为 /www/server/panel/script/clean_old_logs.sh,chmod +x LOG_DIR="/www/wwwlogs" RETAIN_DAYS=7 <p>find "$LOG_DIR" -name "<em>.log" -type f -mtime +$RETAIN_DAYS -not -name "</em>.error.log" -delete find "$LOG_DIR" -name "*-error.log" -type f -mtime +$RETAIN_DAYS -delete</p>
说明:
-
-mtime +7表示「修改时间早于 7 天前」,比-daystart更稳妥,避免跨天误差 -
-not -name "*.error.log"是为了区分访问日志和错误日志,避免误删——宝塔切割后,错误日志通常带-error后缀 - 务必用
find ... -delete而非rm -f,前者原子性更强,不会因文件名含空格或特殊字符崩掉
把清理脚本加入宝塔定时任务,并避开高峰
直接在宝塔「计划任务」里添加,参数要卡准:
- 任务类型选「Shell 脚本」
- 脚本路径填绝对路径:
/www/server/panel/script/clean_old_logs.sh - 执行周期建议设为「每天 03:30」——避开业务高峰,也错开宝塔默认的 00:00 切割时间,防止两个进程同时操作同一目录
- 务必勾选「禁止重复执行」,否则日志量突增时可能并发运行,引发误删
加完后点「执行一次」手动测试,再看 ls -lt /www/wwwlogs/ 是否有老归档消失,同时 tail -f /var/log/cron 确认无报错。
注意:脚本里没加日志记录,如果后续要排查清理行为,得自己在脚本开头追加 echo "$(date): cleaning..." >> /var/log/bt_clean.log —— 宝塔本身不记录自定义脚本的输出。










