jenkins访问服务器的时候执行啥进程的命令:
ps -ef | grep java | grep $dir_tomcat_home | awk '{ print $2 }'|xargs kill -9
先通过管道过滤出java再过滤目标服务的原因是:
本身通过jenkins/ssh 访问$dir_tomcat_home的这个操作也是一个进程,如果不限过滤掉的话,搜索结果如果该线程,排在前面会导致想要的进程没有杀掉,而杀掉了ssh访问的线程
awk "{print $2}":一行一行读取文件,以空格分割,输出第二个,这里是获取线程号
xargs命令可以通过管道接受字符串,并将接收到的字符串通过空格分割成许多参数(默认情况下是通过空格分割) 然后将参数传递给其后面的命令
比如:
kickseed:~/projects$ ps -ef | grep java |grep /home/souche/tomcats/crm.dasouche.net
souche 13046 1 8 14:34 ? 00:02:04 /usr/local/share/java8/jre/bin/java -Djava.util.logging.config.file=/home/souche/tomcats/crm.dasouche.net/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dignore.endorsed.dirs= -classpath /home/souche/tomcats/crm.dasouche.net/bin/bootstrap.jar:/home/souche/tomcats/crm.dasouche.net/bin/tomcat-juli.jar -Dcatalina.base=/home/souche/tomcats/crm.dasouche.net -Dcatalina.home=/home/souche/tomcats/crm.dasouche.net -Djava.io.tmpdir=/home/souche/tomcats/crm.dasouche.net/temp org.apache.catalina.startup.Bootstrap start
kickseed:~/projects$ ps -ef | grep /home/souche/tomcats/crm.dasouche.net
souche 13046 1 8 14:34 ? 00:02:05 /usr/local/share/java8/jre/bin/java -Djava.util.logging.config.file=/home/souche/tomcats/crm.dasouche.net/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dignore.endorsed.dirs= -classpath /home/souche/tomcats/crm.dasouche.net/bin/bootstrap.jar:/home/souche/tomcats/crm.dasouche.net/bin/tomcat-juli.jar -Dcatalina.base=/home/souche/tomcats/crm.dasouche.net -Dcatalina.home=/home/souche/tomcats/crm.dasouche.net -Djava.io.tmpdir=/home/souche/tomcats/crm.dasouche.net/temp org.apache.catalina.startup.Bootstrap start
souche 13465 11963 0 14:59 pts/1 00:00:00 grep --color=auto /home/souche/tomcats/crm.dasouche.net
如果第二个命令中如果第二个会话线程在第一前面的话,会导致没有杀掉目标进程而杀掉了会话进程
export BUILD_ID=pleaseDontKillMe
export BUILD_ID=dontKillMe这一句很重要,因为该job启动完后执行下一job,jenkins直接把tomcat进程杀了,所以无论脚本中怎么写了启动tomcat的命令,他是不会启动的