首页/系统/Linux 运维命令速查/场景:rsync 增量发布站点
网络命令82 条

场景:rsync 增量发布站点

静态产物/配置目录同步到多台服务器:先 --dry-run 核对清单,再同步;--delete 会删远端多余文件,务必确认范围。

Linux 运维命令速查系统更新于 2026-10-13

rsync 增量发布是什么场景

用 rsync 把构建产物或配置目录同步到多台服务器,是小型集群最常见的发布方式:它只传差异块,几台机器几秒钟就能同步完成,还能用 --delete 让远端与源目录严格一致。风险也集中在这个选项上——它会删除目标端所有多余文件,路径写错或结尾斜杠位置不对,可能一次性清空站点根目录。稳妥流程永远是先用演练模式核对清单,再正式同步,最后逐台复核。

基本信息

适用平台Linux、macOS(两端都需安装 rsync)
场景多机增量发布与目录同步
常用流程演练预览、正式同步、逐台复核
关键选项-a 归档 -z 传输压缩 --delete 删除目标端多余文件 --exclude 排除项
斜杠语义源路径结尾有斜杠同步目录内容,没有则同步目录本身
最大风险--delete 用错路径会清空目标目录

典型使用场景

  • 把前端构建产物同步到多台 Web 服务器,保持各机版本一致。
  • 更新配置目录,同步后用远程执行命令触发服务重载。
  • 首次同步新目录先不加删除选项试跑,确认路径无误再加固。
  • 把本地备份目录镜像到远端存储,保留删除语义以保持完全一致。
  • 批量分发证书或静态资源到多台机器。

安全发布流程

安全发布流程
rsync -avn --delete /var/www/app/dist/ web1:/var/www/app/dist/ | head -40   # 先演练
rsync -avn --delete /var/www/app/dist/ web2:/var/www/app/dist/ | head -40
rsync -avz --delete --exclude '.env' /var/www/app/dist/ web1:/var/www/app/dist/
rsync -avz --exclude '.env' /var/www/app/dist/ web1:/var/www/app/dist/      # 首次不加删除
for h in web1 web2; do
  rsync -avz --delete /var/www/app/dist/ $h:/var/www/app/dist/ || echo "$h 失败"
done
ssh web1 'ls -l /var/www/app/dist/index.html'       # 逐台复核产物
ssh web1 'sha256sum /var/www/app/dist/index.html'   # 与本地摘要比对

选项与写法对照

选项或写法作用使用要点
-a归档模式保留权限、属主与时间戳
-z传输压缩文本类产物收益明显,已压缩文件收益有限
-n 演练只打印不写入发布前必做的第一步
--delete删除目标端多余文件首次上线不要加,确认路径后再考虑
--exclude排除指定模式环境文件与上传目录要显式排除
结尾斜杠影响同步语义带斜杠同步内容,不带则同步目录本身
源路径结尾斜杠是发版事故高发点:带斜杠表示把目录内容同步到目标目录里,不带斜杠表示在目标里再建一层同名目录,两者结果差别很大,动手前用演练模式确认。
用 --exclude 保护不该被覆盖的内容:用户上传目录、环境变量文件、运行期生成的缓存。这些排除项最好固化进发布脚本,而不是每次临时手写。
多机发布要逐台复核结果:一台成功一台失败的半完成状态比全失败更难排查。脚本里应显式判断每台的退出码,失败就中止后续步骤并保留现场。

易错点

  • --delete 用在没确认过的新路径上,目标端原有内容被整批删除且难以恢复;新路径先不加该选项跑一遍,确认无误后再加。
  • 源路径斜杠位置写错,产物被同步到多一层目录或覆盖到不该动的位置,站点直接不可用;发布前务必用演练模式核对目标路径。
  • 忘记排除用户上传目录或环境文件,发布后被清掉导致功能异常;排除项应固化到脚本里。
  • 多机发布只看最后一台的退出码,前面机器的失败被掩盖;脚本要逐台判断并在失败时中止。

数据来源与参考

  • man 1 rsync

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌