一、概述
大概yaml语句如下
- name: "关闭tomcat"
shell: "kill -9 `ps -ef|grep java|grep -v grep|grep tomcat|awk '{print $2}'`"
- name: "启动tomcat"
#直接使用{{ remotedir }}/bin/startup.sh启动不起来
shell: "nohup {{ remotedir }}/bin/startup.sh &"
二、问题说明
1、关于不使用shutdown
刚开始使用的:
shell: "{{ remotedir }}/bin/shutdown.sh &"
但是发现tomcat配置了一些东西,导致这个命令无法关闭,只能使用kill -9 杀进程号的方式
2、kill关闭报错
1、直接使用:
shell: "kill -9 `ps -ef|grep java|grep tomcat|awk '{print $2}'`" #未加grep -v grep
运行时会报错:"msg": "non-zero return code",
2、网上一种说法是添加:ignore_errors: true可以解决问题即:
- name: "关闭tomcat"
ignore_errors: yes
shell: "kill -9 `ps -ef|grep java|grep tomcat|awk '{print $2}'`"
这种办法虽然能杀掉tomcat进程,并且会继续运行下去,但是并没有实际发现报错出在哪里,解决报错
3、使用ansible命令发现端倪:
ansible 192.168.10.131 -m shell -a "ps -ef|grep java|grep tomcat" -i hosts
结果输出两个进程
<1、远程tomcat的进程
<2、/bin/bash -c ps -ef|grep java|grep tomcat #ansible远程连接的进程
需要添加grep -v grep进行过滤
4、最终方案
- name: "关闭tomcat"
shell: "kill -9 `ps -ef|grep java|grep -v grep|grep tomcat|awk '{print $2}'`"
3、启动报错找不到java
启动tomcat报错:
Neither the JAVA_HOME nor the JRE_HOME environment variable is defined At least one of these environment variable
is needed to run this program
使用ansible单独测一下:
ansible 192.168.10.131 -m shell -a "java -version" -i hosts
"/bin/sh: java: command not foundnon-zero return code"
远程机器都是在/etc/profile里面配置的java环境变量,使用ansible不会读取这个文件,会读取/etc/bashrc和~/.bashrc
将java环境变量配置复制一份到~/.bashrc
重新运行即可跑通