ansible执行命令时等待执行,举个例子说明
时间: 2023-07-21 14:27:23 浏览: 54
好的,举个简单的例子说明一下。
假设我们需要在目标机器上执行一个长时间运行的命令,比如安装一个非常大的软件包。我们希望在命令执行完成之后再进行后续操作,比如检查软件包是否安装成功。我们可以通过 async 特性来实现这个需求。
首先,在 Ansible 任务中添加 async 和 poll 参数,指定后台执行命令的时间和轮询状态的时间间隔:
```yaml
- name: Install large software package
command: /path/to/large_software_package_install_command
async: 3600 # 1 hour
poll: 60 # check every minute
```
上面的代码中,async 参数指定后台执行命令的时间为 1 小时,poll 参数指定轮询命令状态的时间间隔为 1 分钟。
接下来,在后续任务中使用 async_status 模块来查询命令执行状态:
```yaml
- name: Wait for large software package installation to complete
async_status:
jid: "{{ item.ansible_job_id }}"
register: job_result
until: job_result.finished
retries: 720 # retry every minute for 12 hours
delay: 60 # wait 1 minute between retries
- name: Check if large software package is installed
command: /path/to/check_large_software_package_installed_command
when: job_result.finished
```
上面的代码中,async_status 模块使用 ansible_job_id 变量来查询命令的执行状态,查询结果保存在 job_result 变量中。然后使用 until 条件来判断命令是否执行完成,如果未执行完成,则继续等待,直到命令执行完成为止。retries 和 delay 参数分别指定重试次数和等待时间间隔。最后,当命令执行完成时,再执行检查命令。
这样,我们就可以在 Ansible 执行命令时等待执行完成再进行后续操作了。