宝塔面板可通过五种方式自动清理过期备份:一、内置“清除过期备份”任务;二、Shell脚本调用find命令;三、结合OneDrive同步状态协同清理;四、Python脚本实现智能条件清理;五、直接配置crontab系统级定时任务。

如果您在宝塔面板中积累了大量历史备份文件,但未及时清理,可能导致磁盘空间持续告急。以下是利用计划任务自动清理过期备份的具体操作方法:
一、使用系统内置的“清除过期备份”计划任务类型
宝塔面板自v7.9起在计划任务中新增了专用的“清除过期备份”类型,可直接调用底层清理逻辑,无需编写脚本,适用于所有标准备份路径(如 /www/backup/site/ 和 /www/backup/database/)。
1、登录宝塔面板,进入【计划任务】页面。
2、点击【添加计划任务】按钮。
3、在“任务类型”下拉菜单中选择清除过期备份。
4、填写任务名称,例如“自动清理30天前网站备份”。
5、在“保留天数”输入框中填入30(表示仅保留最近30天内的备份文件,更早的将被删除)。
6、设置执行周期,例如选择“每天”并在时间栏设定为03:00(避开业务高峰)。
7、点击【添加任务】完成配置。
二、通过Shell脚本调用find命令精准清理指定目录
该方法提供更高自由度,支持按路径、文件名模式、修改时间等多条件组合清理,适用于自定义备份路径或混合存储结构。
1、登录宝塔面板,进入【计划任务】→【添加计划任务】。
2、选择“任务类型”为Shell脚本。
3、在脚本编辑区粘贴以下内容:
#!/bin/sh find /www/backup/site -mtime +30 -name "*.zip" -exec rm -f {} \; find /www/backup/database -mtime +30 -name "*.sql.gz" -exec rm -f {} \;
4、将任务名称设为“Shell清理站点与数据库旧备份”。
5、设置执行周期为“每天”,时间建议设为02:30。
6、点击【添加任务】保存。
三、结合OneDrive云备份实现本地+云端双层过期管理
当启用OneDrive同步备份后,本地备份文件可能因同步延迟或失败而残留;此方案确保本地清理与云端状态协同,避免误删已同步成功的关键备份。
1、确认OneDrive插件已安装并授权成功,且同步目录映射为/www/backup/od_sync。
2、添加新计划任务,类型为Shell脚本。
3、脚本内容如下:
#!/bin/sh # 先等待OneDrive同步完成(最多等待120秒) timeout 120 /www/server/panel/plugin/onedrive/onedrive.py --status | grep -q "synced" || exit 1 # 再清理本地30天前未同步成功的备份(标记为*.pending) find /www/backup/site -mtime +30 -name "*.pending" -exec rm -f {} \; # 清理已确认同步成功的本地备份(保留7天供回溯) find /www/backup/od_sync -mtime +7 -name "*.zip" -exec rm -f {} \;
4、设置任务名称为“OneDrive协同清理”。
5、执行周期设为“每天”,时间设为04:00。
6、点击【添加任务】生效。
四、基于Python脚本实现条件化智能清理
适用于需依据备份状态(如是否成功、是否已还原测试过)、文件大小阈值或标签元数据进行判断的高级场景,依赖宝塔内置Python环境(通常为Python 3.7+)。
1、在服务器上创建清理脚本文件:/www/scripts/clean_expired_backups.py。
2、脚本内容包含读取宝塔备份日志、解析备份状态字段、筛选“失败”或“超大体积”备份项,并执行删除。
3、添加计划任务,类型选“Shell脚本”,脚本内容为:
#!/bin/sh cd /www/scripts && python3 clean_expired_backups.py --keep-days 30 --max-size-mb 500
4、任务名称设为“Python智能清理(按大小+时效)”。
5、执行周期设为“每周”,时间设为星期日凌晨01:15。
6、点击【添加任务】完成。
五、利用crontab直接配置系统级定时清理(绕过宝塔UI)
该方式不依赖宝塔Web界面调度,避免面板异常时任务中断,适合对稳定性要求极高的生产环境。
1、SSH登录服务器,执行:crontab -e。
2、在末尾新增一行:
0 3 * * * find /www/backup -type f \( -name "*.zip" -o -name "*.sql.gz" \) -mtime +30 -delete 2>/dev/null
3、保存退出(vi中按Esc,输入:wq回车)。
4、验证是否写入成功:执行crontab -l,确认该行存在。
5、系统将在每天凌晨3点整自动执行该清理指令。










