使用shell重启tomcat

来源:互联网 发布:中国科学院大学知乎 编辑:程序博客网 时间:2024/05/20 20:17

背景:在windows上可以用shutdown.bat关闭tomcat,但是在linux上单纯使用shutdown关闭tomcat还是可以连接,所以只能找出tomcat的pid号,然后进行kill,注意要用chmod +x XXX.sh使用shell文件具有执行权限,然后运行shell的时候要写全目录。在windows下点击tomcat的窗口按ctrl+c就可以关闭tomcat,所以当你开了某些软件的划词取词功能(有些就是直接调用ctrl+c直接把内容复制进粘贴板进行查询的),有可能点选某些内容就会导致tomcat被关闭。以下进入正题:​

#! /bin/bash          # "#!"指此脚本使用/bin/bash来解释执行。

SHUTDOWN="/opt/tomcat7/bin/shutdown.sh"  #定义字符串,注意等号前后不能有空格,不然会报错

STARTUP="/opt/tomcat7/bin/startup.sh"

pidList=`ps -ef|grep tomcat|grep -v "grep"|awk '{print $2}'`  #注2

if [ "${pidList}" = "" ]      #注3

then

echo "no tomcat alive!"

else

echo "run shutdown"

$SHUTDOWN     #调用/opt/tomcat7/bin/shutdown.sh关闭tomcat

echo "pid of tomcat is: ${pidList}"

kill -9 ${pidList}      #通过pid找到tomcat并kill,-9是强制删除的意思

echo "$pidList is killed"

fi       #要把if倒过来写结束if语句

echo "start tomcat"

$STARTUP   #调用/opt/tomcat7/bin/startup.sh开启tomcat


注:

1.#是shell中注释的,相当于java或c中的//,shell无批量注释

​2."`"是键盘上方数字1左边的那个键,不是单引号,"ps -ef"列出当前运行中的process,“grep tomcat”则是获得管道|之前结果中包含“tomcat”的内容,grep -v "grep"则是剔除|前结果中包含“grep”的内容(正常情况下再ps -ef中我们会获得两个带tomcat的结果,一个是tomcat服务的,一个则是当前我们正在运行的grep获取tomcat的,所以要剔除第二种情况,可以把这条指令单独并拆分运行看看结果);awk '{print $2}'则是可以显示|前结果中第一行中的第二列数据(也就是pid);所以这一条目的就是把tomcat的pid赋值给一个字符串pidList

3.注意[前后有空格,不然会报错,这里判断tomcat的pid是否存在也就是当前tomcat是否在运行中,在关闭前要先判断过,不然会报错

4.有时候运行shell会发现出现了多个PID,​shell中用ps -ef|grep tomcat|grep -v "grep"查询可以看到多出来的几个PID是什么,比如我放在/opt目录下时运行会出现两个.sh的PID,这时候加上|grep -v ".sh"即可,如果只有tomcat使用java也可以用ps -ef|grep java|grep -v "grep"定位tomcat