Ansible:delegate_to任务服务器无响应时如何设置5分钟超时?
解决Ansible delegate_to任务超时问题的几种方案
方案1:利用Shell/Command模块内置的timeout参数
Ansible的shell和command模块本身提供了timeout参数,直接给任务设置该参数即可限制命令执行的超时时间,单位为秒(5分钟对应300秒)。
修改后的任务代码:
- name: Get disk size from server1 shell: time df -h delegate_to: "server-1" ignore_errors: true timeout: 300 # 设置为5分钟(300秒)
注意:该参数要求Ansible版本≥2.4,若使用版本过低,建议升级或选用其他方案。
方案2:使用异步任务(async + poll)
通过异步执行任务的方式设置超时时间,async定义任务最长运行时长,poll设置轮询间隔(设为0表示不主动轮询)。到超时时间后任务会自动终止,不会持续阻塞。
示例代码:
- name: Get disk size from server1 asynchronously shell: time df -h delegate_to: "server-1" ignore_errors: true async: 300 poll: 0 register: disk_size_task # 可选:如需获取任务结果,可添加以下轮询任务 - name: Check async task status async_status: jid: "{{ disk_size_task.ansible_job_id }}" delegate_to: "server-1" register: job_result until: job_result.finished retries: 10 # 自定义轮询次数 delay: 30 # 每次轮询间隔30秒
方案3:通过SSH连接参数设置超时
从SSH连接层面限制超时时间,可针对单个任务或全局生效。
单任务设置
通过ansible_ssh_timeout变量为当前任务指定SSH连接超时:
- name: Get disk size from server1 shell: time df -h delegate_to: "server-1" ignore_errors: true vars: ansible_ssh_timeout: 300 # SSH连接超时5分钟
全局设置
修改ansible.cfg文件,让所有任务默认应用该超时配置:
[ssh_connection] timeout = 300
内容的提问来源于stack exchange,提问作者Subbiah
相关产品推荐
相关产品推荐

