如何在远程机器上使用rsync同步两个本地绝对路径?
在远程机器上通过Ansible使用rsync同步本地两个绝对路径的方案
嘿,我来帮你搞定这个问题!咱们先明确需求:你要在远程机器内部,用rsync同步这台机器上的两个本地绝对路径,对吧?结合你使用的Ansible 2.5.0、基于Ubuntu 16.04的elementary OS Loki环境,下面给你两种实用的方案:
方案一:直接在远程执行rsync命令(最推荐)
这是最直接、兼容性最好的方式——让Ansible在远程主机上运行原生的rsync命令,完全匹配你“远程机器本地同步”的需求。
示例Playbook
- name: 同步远程机器本地的两个路径 hosts: 你的远程主机别名或IP tasks: # 先确保远程机器已安装rsync(Ubuntu系统默认可能有,但保险起见加上) - name: 安装rsync(如果未安装) apt: name: rsync state: present update_cache: yes # 执行本地同步命令 - name: 运行rsync同步源路径到目标路径 shell: rsync -avz /绝对路径/源目录 /绝对路径/目标目录 args: warn: no # 关闭shell模块的默认警告,因为我们明确需要用shell执行命令
关键参数说明
rsync -avz:这是rsync的经典组合参数:a:归档模式,会保留文件权限、时间戳、软链接等所有属性v:verbose模式,输出同步过程的详细信息,方便排查问题z:压缩传输(虽然是本地同步,压缩不会提升速度,但也不会有负面影响,保留也无妨)
- 如果需要删除目标路径中源路径没有的文件(实现完全镜像同步),可以加上
--delete参数,命令变成:rsync -avz --delete /绝对路径/源目录 /绝对路径/目标目录
方案二:使用Ansible rsync模块(特殊场景)
如果你一定要用Ansible自带的rsync模块(比如需要利用模块的日志、幂等性校验等特性),可以通过特殊配置实现远程本地同步,但这个方案相对绕一点,仅推荐有特殊需求的场景:
示例Playbook
- name: 用Ansible rsync模块实现远程本地同步 hosts: 你的远程主机别名或IP tasks: - name: 同步远程本地路径 rsync: src: /绝对路径/源目录 dest: /绝对路径/目标目录 mode: pull delegate_to: "{{ inventory_hostname }}"
说明
这里通过delegate_to把任务委派给远程主机自己,让rsync模块在远程主机上执行本地同步操作。不过需要注意,Ansible 2.5.0的rsync模块参数可能和新版本略有差异,如果你遇到兼容性问题,优先用方案一。
内容的提问来源于stack exchange,提问作者Naftuli Kay
相关产品推荐
相关产品推荐

