要用非同步的方式執行task
下為一個範例,第一個task預計要花100秒.但是不想等,要直接執行第二個task.
---
- hosts: host1
tasks:
- name: ping google 100
shell: "ping 8.8.8.8 -c 100 > google.log"
async: 100 # 允許 task 最久執行多長時間(秒)
poll: 0 #多久polling一次執行結果,直到async時間到. 設為 0 就是射後不理,不用等直接跑下一個task.以後再用async_status查最後結果.
register: ping_google_100
ignore_errors: yes
- name: ping hinet 10
shell: "ping 168.95.1.1 -c 10 > hinet.log"
async: 10
poll: 0
register: ping_hinet_10
ignore_errors: yes
執行 playbook, 每個task會有對應的 ansible_job_id
$ ansible-playbook playbook.yml -v
...
...
TASK [ping google 100] *********************************************************************************
changed: [host1] => {"ansible_job_id": "385415241435.27801", "changed": true, "finished": 0, "results_file": "/root/.ansible_async/385415241435.27801", "started": 1}
...
...
等過了最常允許執行時間後,再用 ansible_job_id 取得task最終執行結果.
$ ansible host1 -m async_status -a "385415241435.27801"