轮询= 0的超时生存期超过超时
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了轮询= 0的超时生存期超过超时相关的知识,希望对你有一定的参考价值。
对于上下文:ansible 2.7.9
我正在尝试Ansible异步操作,并正在使用此剧本:
---
- hosts: 127.0.0.1
connection: local
gather_facts: no
tasks:
- name: This is "long task", sleeping for {{ secondsTaskLong }} seconds
shell: "[ -f testFile ] && rm testFile; sleep {{ secondsTaskLong }}; touch testFile"
async: "{{ timeoutSeconds }} "
poll: 0
- stat:
path: testFile
register: checkTestFile
- name: Check the test file exists
assert:
that: checkTestFile.stat.exists
...
测试1:
ansible-playbook async.yml --extra-var "secondsTaskLong=2 timeoutSeconds=3"
断言失败,但是如果我检查目录内容,ls
将显示测试文件./testFile
在这里。
测试2:
持续时间为5s的测试:
ansible-playbook async.yml --extra-var "secondsTaskLong=5 timeoutSeconds=3"; watch -n 1 -d "ls -l testFile"
[最后的watch
部分显示了在执行剧本后几秒钟就创建了测试文件。
测试3:
现在持续时间为9秒(即,超出超时时间):
ansible-playbook async.yml --extra-var "secondsTaskLong=9 timeoutSeconds=3"; watch -n 1 -d "ls -l testFile"
仍然创建测试文件。
测试4:
现在尝试10秒:
ansible-playbook async.yml --extra-var "secondsTaskLong=10 timeoutSeconds=3"; watch -n 1 -d "ls -l testFile"
未创建测试文件。
到底发生了什么?是什么让这个“长期任务”在超时后还能生存9秒?是什么在10秒内杀死它?
编辑:
我可以添加一个显式的连接超时> 10s,但仍然观察到相同的行为:
ansible-playbook async.yml -T 20 --extra-var "secondsTaskLong=9 timeoutSeconds=3"; watch -n 1 -d "ls -l testFile"
ansible-playbook async.yml -T 20 --extra-var "secondsTaskLong=10 timeoutSeconds=3"; watch -n 1 -d "ls -l testFile"
答案
到底发生了什么?是什么让这个“漫长的任务”活了9年秒,超出超时时间?是什么在10秒内杀死它?
poll > 0
时,ansible使用async
值作为超时,否则,使用连接超时(默认为10秒)。请参阅有关连接超时here和poll
值here的详细信息。
例如,如果您像下面那样更改任务并使用timeoutSeconds=3 and secondsTaskLong=4
,则您将在3秒后收到超时错误,并且断言将失败。但是,对于timeoutSeconds=3 and secondsTaskLong=2
,assert将成功。
- name: This is "long task", sleeping for {{ secondsTaskLong }} seconds
shell: "[ -f testFile ] && rm testFile; sleep {{ secondsTaskLong }}; touch testFile"
async: "{{ timeoutSeconds }} "
poll: 1
以上是关于轮询= 0的超时生存期超过超时的主要内容,如果未能解决你的问题,请参考以下文章