宝塔面板备份计划需修改backup.sh脚本添加--exclude参数实现排除目录;网站备份在SiteBackup()中修改tar命令,数据库备份则在DatabaseBackup()中用--ignore-table排除指定表。

宝塔面板备份计划里怎么加排除目录
宝塔的「网站」或「数据库」备份计划本身不支持直接填写排除路径,必须通过修改其底层调用的 tar 命令参数来实现。默认备份会打包整个网站根目录,如果你有缓存目录(如 runtime/、cache/)、上传临时文件(如 uploads/tmp/)或日志(如 logs/),不手动排除会导致备份体积膨胀、耗时变长,甚至因磁盘满而失败。
修改 backup.sh 脚本添加 --exclude 参数
宝塔执行备份时实际调用的是 /www/server/panel/class/backup.sh。你需要在该脚本中定位到生成 tar 命令的位置(通常在函数 SiteBackup() 或 DatabaseBackup() 内),找到类似这行:
tar zcf $fileName $sitePath
把它改成带排除规则的写法,例如:
tar zcf $fileName --exclude="$sitePath/runtime" --exclude="$sitePath/cache" --exclude="$sitePath/logs" $sitePath
-
--exclude必须写在tar命令最后的源路径之前,顺序错会导致被忽略 - 路径必须是绝对路径,且与
$sitePath拼接后能真实存在(建议先ls -d /www/wwwroot/your-site/runtime确认) - 排除项支持通配符,比如
--exclude="$sitePath/uploads/*_tmp",但不要用**——tar不识别 - 修改后记得
chmod +x /www/server/panel/class/backup.sh确保可执行
备份计划触发后如何验证排除是否生效
不能只看任务显示“成功”,得检查实际生成的 .tar.gz 文件内容:
- 进入备份目录(如
/www/backup/site/),找到最新备份包,用tar -tzf your-site_20240510.tar.gz | head -20查看前 20 行文件列表 - 确认
runtime/、cache/等目录没出现在输出里 - 如果出现,说明
--exclude路径写错了 —— 常见原因是路径多了一层/(如写成"$sitePath//runtime")或大小写不匹配(Linux 区分大小写) - 也可以临时用
tar -czf test.tar.gz --exclude="/www/wwwroot/test/runtime" /www/wwwroot/test手动测试命令是否生效
数据库备份无法用 --exclude?那就换思路
数据库备份走的是 mysqldump,不支持 --exclude。如果你只想排除某些表(比如日志表 sys_log、监控表 metrics_202405),得改 DatabaseBackup() 函数里的 mysqldump 命令:
mysqldump -u$user -p$pass $db_name --ignore-table=$db_name.sys_log --ignore-table=$db_name.metrics_202405 > $fileName
-
--ignore-table是 mysqldump 原生命令,格式严格:--ignore-table=数据库名.表名 - 多个表要重复写多个
--ignore-table,不能用逗号分隔 - 注意:如果数据库名含下划线或特殊字符,
mysqldump可能报错,此时需用反引号包裹,如--ignore-table=`my_db`.`log_table`
改完脚本后,下次备份计划运行才会生效。别忘了每次宝塔升级都可能覆盖 backup.sh,建议备份该文件并做好更新提醒。

















