Ansible(14)wait_for模块

本文介绍Ansible中的wait_for模块,该模块用于等待特定条件满足后再继续执行后续任务,例如等待端口开放或文件出现。文章详细解释了模块的各项参数及其使用场景。

模块说明

当你利用service 启动tomcat,或数据库后,他们真的启来了么?这个你是否想确认下? 
wait_for模块就是干这个的。等待一个事情发生,然后继续。它可以等待某个端口被占用,然后再做下面的事情,也可以在一定时间超时后做另外的事。

常用参数

参数名 是否必须 默认值 选项 说明
connect_timeout no 5   在下一个事情发生前等待链接的时间,单位是秒
delay no     延时,大家都懂,在做下一个事情前延时多少秒
host no 127.0.0.1   执行这个模块的host
path no     当一个文件存在于文件系统中,下一步才继续。
port no     端口号,如8080
state no started present/started/stopped/absent 对象是端口的时候start状态会确保端口是打开的,stoped状态会确认端口是关闭的;对象是文件的时候,present或者started会确认文件是存在的,而absent会确认文件是不存在的。

案例

# 10秒后在当前主机开始检查8000端口,直到端口启动后返回
- wait_for: port=8000 delay=10

# 检查path=/tmp/foo直到文件存在后继续
- wait_for: path=/tmp/foo

# 直到/var/lock/file.lock移除后继续
- wait_for: path=/var/lock/file.lock state=absent

# 直到/proc/3466/status移除后继续
- wait_for: path=/proc/3466/status state=absent
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

到此上次那个家庭作业用到的全部模块都讲解完毕。

name: Detect processes of GS register: gs_pgrep_cmd changed_when: false failed_when: gs_pgrep_cmd.rc == 2 ansible.builtin.command: cmd: pgrep -x {{ gs_worker_name }} name: Terminate if no gs worker when: not gs_pgrep_cmd.stdout_lines ansible.builtin.fail: msg: “No GS worker” name: Only do when apex home exists when: apex_home_st.stat.exists block: name: Get worker state of port listening poll: 0 changed_when: false register: apex_port_wait_for async: “{{ apex_port_timeout }}” ansible.builtin.wait_for: state: started port: “{{ _port }}” timeout: “{{ apex_port_timeout }}” vars: _port: “{{ apex_port_start + lines[index].line_num | int }}” loop: “{{ gs_pgrep_cmd.stdout_lines }}” loop_control: index_var: index label: “{{ _port }}” name: Wait async wait_for no_log: true ignore_errors: true register: apex_port_wait_for_async ansible.builtin.async_status: jid: “{{ item.ansible_job_id }}” loop: “{{ apex_port_wait_for.results }}” name: Start apex worker # noqa no-changed-when when: not apex_home_st.stat.exists or apex_port_wait_for_async.results[index] is failed ansible.builtin.shell: cmd: nohup ./AHNetServer > /dev/null & args: chdir: “{{ apex_home }}/svr{{ lines[index].line_num }}/ax_itemsvr” loop: “{{ apex_port_wait_for_async.results }}” loop_control: index_var: index label: “nohup {{ apex_home }}/svr{{ lines[index].line_num }}/ax_itemsvr/AHNetServer > /dev/null &” pgrep -x rungs 6423 6425 6428 6431 lines为4条线,为什么最终只有一条线执行了nohup ./AHNetServer > /dev/null &
最新发布
09-13
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值