Ansible 本身不支持原生断点续传,但可通过幂等性、retry 文件、synchronize 模块(基于 rsync)、uri 模块重试、自定义 rsync 脚本及配置加固(retries/timeout/forks)实现等效断点续传的可靠部署。

Ansible 本身不提供原生的“断点续传式部署”能力,它没有像 rsync -P 或 wget -c 那样的文件传输断点恢复机制。但通过合理组合 Ansible 的幂等性、重试控制、模块特性与外部工具(如 rsync、curl、aria2c),可以在不稳定网络环境下实现**效果等效于断点续传的可靠部署**——即中断后重跑 playbook 不会重复传输、不会破坏中间状态、能从失败任务处继续推进。
用 retry 文件触发幂等重试
Ansible 执行失败时会自动生成 .retry 文件(例如 playbook.retry),记录失败主机和任务。这不是“断点续传”的底层机制,而是运维层面的恢复入口:
- 执行失败后,Ansible 默认在当前目录生成
playbook.retry - 直接运行
ansible-playbook playbook.yml --limit @playbook.retry,就只重试失败主机上未成功的任务 - 配合
--start-at-task "task_name"可跳过已成功步骤,聚焦后续操作
文件传输环节真正支持断点:用 synchronize 或自定义脚本
Ansible 的 copy 模块是全量覆盖,不支持断点;而 synchronize 模块底层调用 rsync,天然具备断点续传能力:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
-
synchronize默认启用--partial和--inplace,传输中断后保留部分文件,重试时自动续传 - 推荐写法:
- name: 同步大应用包
synchronize:
src: "/local/app-v2.3.tar.gz"
dest: "/opt/app/"
archive: no
compress: yes
rsync_opts:
- "--partial-dir=.rsync-partial"
- "--timeout=60" - 若需更细粒度控制(如带重试、进度、校验),可封装 shell 脚本,用
command模块调用rsync -P或aria2c -c
网络不稳定时增强鲁棒性的关键配置
单纯依赖 retry 文件不够,需从连接、超时、重试三方面加固:
- 在
ansible.cfg中设置:
[defaults]
retries = 3
connect_timeout = 30
timeout = 60
forks = 10 - 在 task 级指定重试逻辑:
- name: 下载远程配置文件
uri:
url: "https://conf.example.com/app.conf"
dest: "/tmp/app.conf"
return_content: yes
register: download_result
until: download_result.status == 200
retries: 5
delay: 10 - 对关键任务加
ignore_errors: yes+ 后续条件判断,避免单点失败阻断整个流程
结合 rsync + Ansible 实现端到端续传流
对于超大文件或目录部署,建议绕过 Ansible 原生文件模块,用 rsync 封装为可重入的部署单元:
- 写一个
deploy-rsync.sh脚本,内含rsync -avzP --partial-dir=.rsync-tmp ...,并检查目标 md5 - 用
script模块分发并执行:
- script: deploy-rsync.sh {{ app_version }}
args:
executable: /bin/bash - 脚本内部用
set -e+trap 'rm -f .rsync-tmp/*' EXIT保证清理与原子性

















