宝塔「一键备份」超时而SSH手动tar不会,因前者受PHP执行时间、内存限制及Nginx代理超时三重约束,且走Web接口易断连;后者绕过所有中间层,直接系统级执行,可后台运行、排除干扰目录、控制压缩级别,不受Web超时影响。

为什么宝塔「一键备份」会超时,而SSH手动tar不会
宝塔面板的网站备份本质是调用 Python 脚本 backup.py,内部封装了 tar -z + gzip -6,全程走 PHP Web 接口,受 max_execution_time、内存限制、Nginx 代理超时(如 proxy_read_timeout 60)三重约束。一旦站点含大量小文件(如 WordPress 的 wp-content/cache 或上传目录),tar 进程本身可能卡在文件遍历或压缩阶段,PHP 层早已超时断连,但后台 tar 进程其实还在跑——你看到的「超时失败」只是前端丢了连接,不是没在打包。
用 SSH 手动执行 tar 的正确姿势
绕过宝塔所有中间层,直接在终端用系统级 tar 命令打包,关键是控制压缩强度、排除干扰目录、后台运行不中断:
- 先切到目标站点根目录:
cd /www/wwwroot/example.com - 用
tar -cf先打原始包(不压缩),跳过日志、缓存、临时文件:tar -cf /www/backup/example_full_$(date +%Y%m%d).tar --exclude='*.log' --exclude='cache/*' --exclude='tmp/*' --exclude='.git' . - 再单独
gzip,用-1级别提速:gzip -1 /www/backup/example_full_$(date +%Y%m%d).tar - 想彻底脱离终端?加
nohup和&后台运行:nohup tar -cf /www/backup/example_full_$(date +%Y%m%d).tar --exclude='*.log' ... . &
注意:--exclude 模式要写相对路径(从当前 cd 目录起),不能写绝对路径;.git 这类隐藏目录必须显式排除,否则可能触发权限错误或打包巨慢。
打包中途断开 SSH 连接怎么办
只要用了 nohup + &,进程就和终端解耦了,断连不影响。但得确认它真在跑:
- 查进程:
ps aux | grep "tar.*example_full" - 看输出日志:
tail -f nohup.out(默认日志落这里) - 如果没加
nohup就断了,进程大概率已死——别重试,先killall tar清残留,再重新跑
另外,tar 本身不支持断点续传,一旦中止就得从头来;所以首次手动打包建议选低峰期,且提前 df -h /www 确认磁盘够用(至少留出 1.5 倍源目录空间)。
打包完怎么安全下载又快又稳
生成的 .tar.gz 文件仍在服务器上,别回宝塔点「下载」——那又走 PHP 接口,照样超时。直接用 FTP/SFTP 工具拉取 /www/backup/ 下的文件即可:
- 推荐 FileZilla 或 Cyberduck,开启「多线程传输」(设 3–5 线程)
- 确保 FTP 用户对
/www/backup有读权限:chmod 755 /www/backup - 若 FTP 登录后看不到该目录,检查用户主目录是否被限制在
/www/wwwroot,需改用 root 或系统用户登录 SFTP
大文件下载最怕的是:你以为在下,其实宝塔 Web 层早 504 了,而你还在刷新页面等。手动 tar + FTP 直取,才是把控制权拿回来的唯一方式。


















