Ansible 任务在执行特定的长时间运行任务时失败

Ift*_*fti 1 linux ssh ansible devops

一次运行所有任务时,Ansible 在运行任务之间断开了 SSH 会话,这需要 26 小时才能完成,但 ansible 在执行 6 小时后断开了 SSH 会话。保持会话的目标服务器 SSH 配置如下:

ClientAliveInterval 172000
ClientAliveCountMax 10
Run Code Online (Sandbox Code Playgroud)

Ansible 任务:

- name: Executing script
  remote_user: "{{admin_user}}"
  become: yes
  shell: sudo -u test bash ./customscript.sh  > /log_dir/customscript.log 2>&1
  args:
    chdir: "deployment_source/common"
  tags:
     - custom-test
Run Code Online (Sandbox Code Playgroud)

找到下面的错误日志:

22:11:44 TASK [role-deployment : Executing script] ************
22:11:44 fatal: [x.x.x.x]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: Shared connection to x.x.x.x closed.\r\n", "unreachable": true}
22:11:44 
22:11:44 NO MORE HOSTS LEFT *************************************************************
22:11:44  to retry, use: --limit @/opt/ansible/test/deployment.retry
22:11:44 
22:11:44 PLAY RECAP *********************************************************************
22:11:44 x.x.x.x : ok=6    changed=2    unreachable=1    failed=0
Run Code Online (Sandbox Code Playgroud)

请告知,断开连接是什么问题?怎么解决呢?

Kon*_*rov 6

您永远不应该期望网络连接稳定那么长时间。

Ansible 中有异步机制来处理长时间运行的作业。

将您的代码重构为:

- name: Executing script
  remote_user: "{{admin_user}}"
  become: yes
  shell: sudo -u test bash ./customscript.sh  > /log_dir/customscript.log 2>&1
  args:
    chdir: "deployment_source/common"
  async: 180000
  poll: 60
  tags:
     - custom-test
Run Code Online (Sandbox Code Playgroud)

允许您的任务执行多达 50 小时,并每 60 秒检查一次完成情况。