【问题标题】:Long running command in Ansible ending in failed status with host unreachableAnsible 中长时间运行的命令以失败状态结束,主机无法访问
【发布时间】:2017-05-18 05:21:58
【问题描述】:

我必须在 Ansible 中运行一个命令,这大约需要 30 多分钟才能完成。该命令必须串行执行。我正在运行的命令是 Cassandra 中的 nodetool repair,如果我们并行启动它,它将处理所有机器中的进程。由于 Cassandra 中的修复无法在所有机器上并行运行。

所以,我们正在串行运行它们。但是,该命令有时需要很长时间才能完成。

由于命令需要很长时间,我的 Ansible playbook 在等待一段时间后就死了,消息节点无法访问。

{"changed": false, "msg": "ssh 连接主机失败。", "unreachable": true}

有没有办法让我可以等待该过程完成?


我将serial: 1 用于主机并在任务下运行

任务:

- name: Execute nodetool repair
  command: {{cassandra_installation_dir}}/bin/nodetool repair -j 4

【问题讨论】:

    标签: ansible ansible-playbook


    【解决方案1】:

    您应该为此使用async

    - name: Execute nodetool repair
      command: {{cassandra_installation_dir}}/bin/nodetool repair -j 4
      async: 3600
      poll: 10
    

    这将在异步模式下运行命令最多 3600 秒 (1h) 并检查命令是否每 10 秒完成一次(无论如何都是默认设置)。如果命令在 1h 后没有完成,任务将失败。

    【讨论】:

    • 嗨 Strahinja,我在尝试连接问题后最终使用了异步。最终我做了完全相同的事情,但轮询时间为 1 分钟。我接受这一点,因为这对尝试类似的其他人会有所帮助。非常感谢。
    • 这不会多次运行相同的命令吧?它运行命令并保持运行,然后每 x 秒重新连接一次并检查,是否正确?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-27
    • 1970-01-01
    • 2023-03-13
    • 2018-06-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多