宝塔面板批量清理网站垃圾缓存与过期日志的完整教程
为什么需要批量清理网站垃圾缓存与过期日志
服务器运行久了,各个站点都会产生大量缓存文件和过期日志。
WordPress、ThinkPHP、Laravel 等框架在运行时会生成 runtime / cache 目录,Nginx 和 Apache 的访问日志也会堆积。
如果不定期清理,磁盘空间会被悄然占满,导致网站访问异常甚至面板无法登录。
本文专门针对使用宝塔面板管理的多站点服务器,提供一套批量清理方案。
不管你有 5 个还是 50 个网站,都能一次性处理,无需逐个登录目录操作。
准备工作:了解磁盘现状和清理范围
在开始清理之前,建议先确认当前磁盘占用情况。
登录宝塔面板,左侧点击“监控” -> “磁盘”,查看整体使用率。
也可以直接登陆 SSH 执行 df -h 快速查看。
常见需要清理的目录包括:
- 各站点下的
runtime、cache、temp、upload/cache等缓存目录 - 网站日志(如
/www/wwwlogs/下的.log文件,超过 7 天或 30 天的老日志) - 宝塔面板自身的缓存(面板设置 -> 清空缓存)
- 系统临时文件(
/tmp)和包管理器缓存
注意:不要盲删.user.ini、index.php或自定义的配置目录。如果不确定,先备份重要数据。
方法一:使用宝塔计划任务 + 脚本批量清理(推荐)
这是最省力的方式——设置一次,以后自动执行。
1. 编写清理脚本
登录宝塔面板,点击左侧“文件”,进入 /root 或 /www 目录,新建文件 batch_clean.sh。
将以下内容粘贴进去:
#!/bin/bash
# 网站根目录(通常位于 /www/wwwroot)
SITE_ROOT="/www/wwwroot"
# 需要清理的目录名(用空格分隔)
CLEAN_DIRS=("runtime" "cache" "temp" "upload/cache")
# 遍历每个站点
for site in "$SITE_ROOT"/*/; do
if [ -d "$site" ]; then
for dir in "${CLEAN_DIRS[@]}"; do
target="${site}${dir}"
if [ -d "$target" ]; then
echo "清理: $target"
rm -rf "$target"/*
fi
done
fi
done
# 清理7天前的日志
find /www/wwwlogs -name "*.log" -mtime +7 -delete
echo "日志清理完成(保留7天内)"
echo "批量清理结束"
2. 赋予执行权限
在文件上右键 -> 权限 -> 勾选“755”,或者终端运行 chmod +x /www/batch_clean.sh。
3. 添加计划任务
宝塔面板 -> 计划任务 -> 添加任务:
- 任务类型:Shell脚本
- 任务名称:批量清理缓存与日志
- 执行周期:每周日 03:00(根据自己需求)
- 脚本内容:
bash /www/batch_clean.sh
点击“添加”后,可手动点击“执行”测试一次。
4. 结果确认
执行后查看“执行日志”是否有报错。
若无错误,磁盘已经释放。
方法二:手动批量执行命令(SSH 方式)
如果你更习惯命令行,或者只想一次性清理,可以 SSH 登录后逐条执行。
以下命令请在 root 用户下运行:
# 进入站点根目录
cd /www/wwwroot
# 批量删除所有站点的 runtime 和 cache 目录内容
for d in */; do [ -d "${d}runtime" ] && rm -rf "${d}runtime"/*; [ -d "${d}cache" ] && rm -rf "${d}cache"/*; done
# 清理7天以上的日志
find /www/wwwlogs -name "*.log" -mtime +7 -delete
如果希望保留空目录结构(不删除目录本身),上述命令已满足。
若要连目录一起删除,需修改命令,但不建议,以免某些程序自动重建目录权限错误。
避坑指南:常见问题与注意事项
- 误清空重要数据:清理前务必确认脚本里的目录名是否和你的站点实际目录一致。有些程序(如 Discuz!)使用
data/cache,需要额外添加。最好先在一个站点上手动验证。 - 日志清理过频:如果日志用于分析流量或排错,建议保留最近 14 天或 30 天,将
-mtime +7改为+14或+30。 - 权限不足:如果日志文件属主是 www,但当前是 root,
find -delete可以成功。若用其他用户执行,可能报“权限不足”。建议脚本以 root 运行。 - 面板缓存未清理:宝塔面板自身也缓存了站点状态,可手动在“面板设置”->“清空缓存”或重启面板。
效果验证:清理前后对比
运行脚本后,再次执行 df -h 查看根分区或 /www 分区的可用空间变化。
也可以登录宝塔面板的“监控”查看最近磁盘走势。
如果清理后磁盘空间没有明显变化,说明主要占空间的可能是其他目录(比如数据库、备份文件、未清理的大文件)。
使用 du -sh /* 或 du -sh /www/* 找出大目录,再针对性处理。
高频问题解答
Q:脚本里列出的目录名和我的站点不一致怎么办?
A:你可以先进入 /www/wwwroot/你的站点/ 查看实际缓存目录名,修改 shell 脚本中的 CLEAN_DIRS 数组即可。
Q:如何只清理某个指定站点?
A:将脚本中 for site in ... 部分改为 site="/www/wwwroot/你的域名",再按同样的清理逻辑执行。
Q:计划任务执行后显示“Permission denied”是什么原因?
A:脚本文件没有执行权限,请在文件管理设置 755 权限,或者用 bash /路径/脚本.sh 代替直接执行。
Q:宝塔面板有自带的清理插件吗?
A:宝塔软件商店中有“日志清理”、“系统加固”等工具,但针对批量站点的缓存清理功能较少,本脚本是更灵活的补充。
---
一次配置,长期受益。
如果你的服务器站点数量多、日志增长快,建议按本文步骤设置定期清理。
遇到问题先回看“避坑指南”,也可以结合实际日志路径微调脚本。
如果想了解更细粒度的文件清理(比如按文件大小或保留天数),可以继续查看我写的相关文章。