在宝塔面板中,如果你想设置“备份所有网站”,但又希望排除某些特定网站,目前宝塔面板的默认备份任务(如计划任务中的“备份网站”)不直接支持“全选+排除”的模式。但你可以通过以下几种方式实现类似效果:
✅ 方法一:手动选择需要备份的网站(推荐)
- 登录宝塔面板。
- 进入 计划任务(或“计划任务”模块)。
- 点击 添加计划任务。
- 任务类型选择:备份网站。
- 在“备份目录”中,不要选择“所有网站”,而是:
- 勾选你需要备份的每一个网站(手动多选)。
- 设置备份周期(如每天、每周等)。
- 保存任务。
⚠️ 优点:精确控制,排除的网站不会被备份。
❗ 缺点:当网站数量多或经常增减时,需手动维护。
✅ 方法二:使用脚本自动备份并排除指定网站
你可以编写一个 Shell 脚本,自动备份所有网站目录,但跳过你指定的某些网站。
示例脚本(排除指定名称的网站):
#!/bin/bash
# 备份目录
backup_dir="/www/backup/sites"
mkdir -p "$backup_dir"
# 排除的网站目录名(根据实际修改)
exclude_sites=("test.example.com" "demo.site.com")
# 遍历 /www/wwwroot 下的所有站点
for site in /www/wwwroot/*; do
site_name=$(basename "$site")
# 判断是否在排除列表中
skip=0
for exclude in "${exclude_sites[@]}"; do
if [ "$site_name" == "$exclude" ]; then
skip=1
break
fi
done
# 跳过排除的站点
if [ $skip -eq 1 ]; then
echo "跳过备份: $site_name"
continue
fi
# 开始备份
tar -zcf "$backup_dir/${site_name}_$(date +%Y%m%d_%H%M%S).tar.gz" -C /www/wwwroot "$site_name"
echo "已备份: $site_name"
done
# 可选:删除7天前的旧备份
find "$backup_dir" -name "*.tar.gz" -mtime +7 -delete
设置步骤:
- 将脚本保存为
/www/scripts/backup_sites.sh - 赋予执行权限:
chmod +x /www/scripts/backup_sites.sh - 在宝塔面板 → 计划任务 → 添加脚本任务:
- 任务类型:Shell 脚本
- 执行周期:按需设置(如每天凌晨)
- 命令:
/bin/bash /www/scripts/backup_sites.sh
✅ 优点:灵活、可自动化、支持排除逻辑。
💡 可扩展:加入日志、邮件通知、上传到远程存储等。
✅ 方法三:利用宝塔 API + 自定义脚本(高级用户)
通过调用宝塔的 API 获取网站列表,过滤后调用备份接口。适合集成到自动化运维系统中,但配置较复杂,一般用户不推荐。
总结建议:
| 方法 | 是否支持排除 | 易用性 | 适用场景 |
|---|---|---|---|
| 手动选择网站 | ✅ | ⭐⭐⭐⭐ | 网站少、变动少 |
| 自定义脚本 | ✅✅✅ | ⭐⭐⭐ | 网站多、需排除 |
| 宝塔默认“所有网站” | ❌(无法排除) | ⭐⭐⭐⭐⭐ | 不推荐用于排除场景 |
📌 提示:
- 宝塔的“所有网站”备份无法设置排除项,这是目前的功能限制。
- 使用脚本方式最灵活,也推荐用于生产环境。
如有更多需求(如备份到云存储、发送邮件通知),也可以扩展脚本功能。需要我帮你定制完整脚本吗?
PHPWP博客