宝塔面板是很多站长管理服务器的常用工具,自带的备份功能可以定期备份网站数据和数据库,但默认不会自动清理旧备份,长期下来会占用大量磁盘空间。我们可以通过编写Shell脚本,结合宝塔的计划任务功能,实现自动清理过期备份文件的需求。

实现思路
核心逻辑是遍历指定的备份目录,找出修改时间超过设定天数的文件,然后执行删除操作。我们需要先确定备份文件的存储路径、过期天数两个关键参数,再编写对应的脚本代码。
1. 确定备份目录
宝塔面板的默认备份路径如下,你也可以根据自己的实际备份配置调整:
- 网站备份默认路径:/www/backup/site/
- 数据库备份默认路径:/www/backup/database/
- SSL证书备份默认路径:/www/backup/ssl/
2. 清理脚本编写
以下是一个通用的清理脚本,支持自定义备份目录和过期天数,你可以根据需求修改参数:
#!/bin/bash
# 备份文件存储目录,根据实际情况修改
BACKUP_DIR="/www/backup/site/"
# 过期天数,超过这个天数的文件会被删除
EXPIRE_DAYS=7
# 日志文件路径,记录清理操作
LOG_FILE="/var/log/backup_clean.log"
# 判断目录是否存在
if [ ! -d "$BACKUP_DIR" ]; then
echo "$(date '+%Y-%m-%d %H:%M:%S') 备份目录 $BACKUP_DIR 不存在,请检查配置" >> $LOG_FILE
exit 1
fi
# 查找并删除过期文件,排除目录本身
find $BACKUP_DIR -type f -mtime +$EXPIRE_DAYS | while read file; do
if [ -f "$file" ]; then
rm -f "$file"
echo "$(date '+%Y-%m-%d %H:%M:%S') 删除过期文件: $file" >> $LOG_FILE
fi
done
echo "$(date '+%Y-%m-%d %H:%M:%S') 本次清理任务执行完成" >> $LOG_FILE
3. 脚本参数说明
| 参数名称 | 说明 |
|---|---|
| BACKUP_DIR | 需要清理的备份文件所在目录,支持绝对路径 |
| EXPIRE_DAYS | 文件过期天数,修改时间超过这个天数的文件会被删除 |
| LOG_FILE | 清理操作的日志存储路径,方便后续排查问题 |
| -mtime +$EXPIRE_DAYS | find命令的参数,表示查找修改时间超过指定天数的文件 |
将脚本添加到宝塔计划任务
脚本编写完成后,需要添加到宝塔的计划任务中才能实现定时自动执行,步骤如下:
- 登录宝塔面板,点击左侧菜单的计划任务
- 任务类型选择Shell脚本
- 任务名称自定义,比如填写“自动清理过期备份文件”
- 执行周期根据需求选择,比如每天凌晨3点执行,选择每天,时间设置为03:00
- 脚本内容框中粘贴上面编写好的脚本代码,根据实际需求修改目录和过期天数参数
- 点击添加任务保存配置
测试验证
添加完成后可以手动点击任务后面的执行按钮测试脚本是否生效:
- 执行后查看日志文件
/var/log/backup_clean.log,确认是否有删除记录 - 到对应的备份目录查看,超过设定天数的文件是否已经被删除
- 如果执行失败,可以查看计划任务的执行日志,排查脚本路径、权限等问题
注意事项
执行删除操作前建议先备份重要数据,避免误删导致数据丢失。可以先把脚本中的rm -f替换为echo,测试输出的文件列表是否符合预期,确认无误后再改回删除命令。
如果服务器上有多个备份目录需要清理,可以编写多个脚本分别添加计划任务,或者在同一个脚本中添加多个目录的清理逻辑,根据实际需求调整即可。