异步功能不作为单独的模块出现,而是作为任务参数使用,因此,大多数模块都可以异步执行;
异步执行功能通常是用来解决执行任务时间过长导致SSH连接超时。
示例:
---
- hosts: "ansible-server"
tasks:
- name: simulate long running op (15 sec), wait for up to 45 sec, poll every 5 sec
command: /bin/sleep 15
async: 45
poll: 5
1. 参数讲解:
async |
任务最大执行时间 |
|
poll |
轮询间隔 |
> POLL:
当 poll > 0 的时候,任务本身依然会阻塞运行,但是,实际上ansible任务与内部执行的shell脚本之间是异步执行,在脚本执行过程中,ansible任务会根据poll设置的轮询时间间隔取获取脚本执行的状态,并根据async判断是否超时了;举个例子:
这是剧本,超时时间设置的很大,轮询间隔是20s,即每20秒获取一次执行状态;
---
- hosts: "ansible-server"
tasks:
- name: test for sync job
shell: |
cd ~/scripts
sh sleep.sh
async: 999
poll: 20
这是sleep.sh脚本,睡眠5s;
sleep 5s
执行结果是整个任务依然需要等待大约20s才能执行完成(虽然实际上有效工作时间只有5s);
当 poll = 0 的时候,任务本身实现了非阻塞的异步执行,由于没有轮询间隔,代表着该任务本身并不会主动获取任务执行状态和结果;此时异步任务会一直执行,直到完成、失败或超时;
我们举个例子: