【问题标题】:Rsync with Ansible times out or fails使用 Ansible 进行 Rsync 超时或失败
【发布时间】:2017-08-11 18:21:59
【问题描述】:

我有 3 个主机,AnsibleMast、DataRepo 和 Node,其中 Node 是 Ansible 的任意数量的目标。我试图让 Node 使用 rsync 从 DataRepo 获取文件。

如果我在 Node 上并执行此命令,文件将按预期传输:

rsync -avzL deployer@datarepo:/home/deployer/data/sbc/cbdbexport /tmp/.

我创建了这个任务:

- name: Copy the database backup file to the target node
  command: 'rsync -azL deployer@datarepo:/home/deployer/data/sbc/cbdbexport /tmp/.'

执行时它只是挂起。我可以查看目标并验证它是否正在运行。

[deployer@steve ~]$ ps -ef | grep ssh
deployer  3778  3777  0 14:00 pts/2    00:00:00 ssh -l deployer datarepo rsync --server --sender -lLogDtprze.iLs . /home/deployer/data/sbc/cbdbexport

我使用同步模块创建了这个任务:

- name: Copy the database backup file to the target node
  synchronize:
    rsync_path: /usr/bin/rsync
    mode: pull
    src: rsync://datarepo:/home/deployer/data/sbc/cbdbexport
    dest: /tmp/
    archive: no
    copy_links: yes

它最终会超时。当我执行 ps -ef | 时,它似乎也从未运行过grep ssh:

FAILED! => {"changed": false, "cmd": "/usr/bin/rsync --delay-updates -F --compress --copy-links --rsync-path=/usr/bin/rsync --out-format=<<CHANGED>>%i %n%L rsync://datarepo:/home/deployer/data/sbc/cbdbexport /tmp/", "failed": true, "msg": "rsync: failed to connect to datarepo: Connection timed out (110)\nrsync error: error in socket IO (code 10) at clientserver.c(124) [receiver=3.0.6]\n", "rc": 10}

在 Ansible 任务失败后,我测试我可以从 Node SSH 到 DataRepo 没有问题。我测试我可以运行原始 rysnc 命令。两者都按预期工作。

问题: 1. 为什么 Ansible 任务中的任何一个都失败了?有什么明显的东西我缺少让它像原始命令一样工作吗?

【问题讨论】:

    标签: ansible rsync


    【解决方案1】:

    我认为你的语法是错误的,你正在尝试使用一个实际的 rsync 共享(这意味着你正在运行 rsync 作为 datarepo 上的守护进程)但是你举例说明的实际命令正在使用通过 ssh 进行 rsync。所以下面是不正确的
    src: rsync://datarepo:/home/deployer/data/sbc/cbdbexport

    我认为应该是
    src: /home/deployer/data/sbc/cbdbexport

    如果您希望任务运行很长时间,您也可以将async 添加到任务中,以避免网络中断或 ssh 超时影响任务,如下所示,这会导致它等待一小时(3600 秒 = 一小时):

    - name: Copy the database backup file to the target node
      synchronize:
        rsync_path: /usr/bin/rsync
        mode: pull
        src: /home/deployer/data/sbc/cbdbexport
        dest: /tmp/
        archive: no
        copy_links: yes
      async: 3600
    

    【讨论】:

    • 异步对命令无效:失败! => {"changed": false, "failed": true, "msg": "此任务不支持异步。"}
    • 拉模式下的 Rsync 似乎需要一个模块名称。我有一个使用 scp 的解决方法。我会在以后的某个时间回到这个问题。 - 名称:将数据库备份文件复制到目标节点命令:'scp :{{database_path}} /pkgtmp/cbdbexport' async: 3600 poll: 5
    猜你喜欢
    • 2017-10-11
    • 2021-03-09
    • 1970-01-01
    • 2016-08-25
    • 2015-08-24
    • 2022-01-12
    • 2020-05-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多