在下一个主机上启动应用程序之前,我想在日志中查找特定句子“ *****-Finished Initialization **”。 tail命令将永远不会停止打印数据,因为应用程序启动后会被某个进程立即使用该应用程序并记录数据。
在第二个主机上重新启动应用程序之前,如何验证呢? 到目前为止,我已经跳过了tail命令,并设置了3分钟的超时时间。
- name: playbook to restart the application on hosts
hosts: host1, host2
tags: ddapp
connection: ssh
gather_facts: no
tasks:
- name: start app and validate before proceeding
shell: |
sudo systemctl start tomcat@application
#tail –f application_log.txt
wait_for: timeout=180
#other shell commands
args:
chdir: /path/to/files/directory
答案 0 :(得分:3)
- name: playbook to restart the application on hosts
hosts: host1, host2
tags: ddapp
connection: ssh
gather_facts: no
tasks:
- name: start app
become: yes
service:
name: tomcat@application
state: started
- name: validate before proceeding
wait_for:
path: /path/to/files/directory/application_log.txt
search_regex: Finished Initialization
通知,如果在应用重启之间未清除日志,并且其中包含多个Finished Initialization
字符串,请参考this question。
答案 1 :(得分:0)
您必须使用wait_for
模块通过正则表达式查找特定的字符串
- name: start app
service:
state: started
name: tomcat@application
become: true
- name: Wait for application to be ready
wait_for:
search_regex: '\*\*\*\*\*--Finished Initialization\*\*'
path: /you/path/to/application_log.txt
wait_for
也可用于检测文件外观(例如pid)或网络端口是否打开(或不打开)。
此外,总是更喜欢使用本机模块,而不是使用Shell脚本来处理部署或操作。因此,我将shell
替换为service
模块。