每次重启项目都需要先查看进程在杀死启动比较麻烦,所以写了一个shell脚本用来重启WEB服务
重启WEB服务步骤
- 查询进程pid
- 停掉旧进程
- 启动新进程
假定环境
- Tomcat名称:tomcat-test
- Tomcat目录:/home/tomcat-test
- Tomcat使用的端口:8080
查询进程PID
根据端口号查询进程PID
命令
netstat -nlp | grep :8080
netstat -nlp | grep :'\<8080\>'
存在的问题
- 因端口号只能被一个进程占用,所以不小心启动两次进程时候,另外一个进程通过端口查询的方式是查询不到的。
根据端口号重启脚本(不推荐)
- 创建脚本restart-web-port.sh
#!/bin/bash
echo "restrat..."
PORT=$1
echo $PORT
if [ ! -n "$PORT" ]
then
PORT=8080
echo "use default port" $PORT
fi
pid=$(netstat -nlp | grep :'\<'$PORT'\>' | awk '{print $7}' | awk -F"/" '{ print $1 }')
if [ -n "$pid" ]
then
kill -9 $pid
echo "kill pid" $pid
else
echo "pid is null"
fi
rm -rf /home/tomcat-test/temp/*
rm -rf /home/tomcat-test/work/*
echo "remove tomcat cache finish..."
sleep 2s
sh /home/tomcat-test/bin/startup.sh

- 把脚本上传到/home/tomcat-test/bin目录下,和start.sh同目录,并授权
chmod a+x restart-web-port.sh
- 启动脚本
./restart-web-port.sh
./restart-web-port.sh 8080
根据关键字查询进程PID
命令
ps -ef|grep java
存在的问题及解决方案
- 使用通用关键字时候,会查询到很多进程,比如java,会把java相关服务都查询到
- 所以定义关键字时候一定要慎重,可以采用下面的一种方式来避免:
- 给tomcat起一个唯一的名字(缺点:确保通过名称查询的pid唯一)
- 带上全路径(推荐,缺点:确保路径固定不变)
根据关键字重启脚本
- 创建脚本restart-web-name.sh
#!/bin/bash
echo "restrat..."
NAME=$1
echo $NAME
if [ ! -n "$NAME" ]
then
NAME=tomcat-test
echo "use default name" $NAME
fi
pid=`ps -ef | grep java | grep $NAME | awk '{print $2}'`
if [ -n "$pid" ]
then
kill -9 $pid
echo "kill pid" $pid
else
echo "pid is null"
fi
rm -rf /home/tomcat-test/temp/*
rm -rf /home/tomcat-test/work/*
echo "remove tomcat cache finish..."
sleep 2s
sh /home/tomcat-test/bin/startup.sh

- 把脚本上传到/home/tomcat-test/bin目录下,和start.sh同目录,并授权
chmod a+x restart-web-name.jar
- 启动脚本
./restart-web-name.sh
./restart-web-name.sh tomcat-test
./restart-web-name.sh /home/tomcat-test/bin