在生产环境下,经常会遇到tomcat无法彻底关闭,也就是用tomcat自带的shutdown.sh脚本无法将java进程完全关掉。所以需要借助shell脚本,将进程杀死,然后再启动。本案例就要写一个脚本来实现上述功能。另外,彻底杀死一个进程的命令是 kill -9 pid
。
具体要求如下:
1)不仅要彻底关闭java进程,还要成功启动tomcat服务;
2)kill -9 杀进程比较危险,有可能会导致一些数据丢失,尽量不要加 -9 ,实在杀不掉时使用 -9 ;
3)启动后要检查是否启动成功,通过是否有java进程存在来判断是否启动成功。
具体代码如下:
#!/bin/bash
#用于关闭、启动tomcat服务
if ! rpm -q psmisc &>/dev/null
then
yum install -y psmisc #没有killall命令就安装
fi
tomcat_dir=/usr/local/tomcat
stop()
{
echo -n "stopping tomcat."
killall java
#systemctl stop tomcat
i=0
while [ $i -lt 10 ]
do
if pgrep -l java &>/dev/null
then
killall java
sleep 1
echo -n "."
i=$[$i+1]
else
echo -e "\033[32m[ok]\033[0m"
break
fi
done
if pgrep -l java &>/dev/null
then
pgrep java |xargs kill -9 2>/dev/null
sleep 1
pgrep java |xargs kill -9 2>/dev/null
fi
if pgrep java &>/dev/null
then
echo -e "\033[31m"java进程杀不掉"\033[0m"
exit
fi
}
start()
{
cd $tomcat_dir
echo -n "starting tomcat."
./bin/startup.sh 2>/tmp/start_tomcat.log
#systemctl start tomcat
i=0
while [ $i -lt 3 ]
do
if ! pgrep java &>/dev/null
then
./bin/startup.sh 2>/tmp/start_tomcat.log
echo -n "."
i=$[$i+1]
else
echo -e "\033[32m[ok]\033[0m"
break
fi
done
if ! pgrep java &>/dev/null
then
echo
cat /tmp/start_tomcat.log
echo -e "\033[31m"tomcat无法启动,请检查"\033[0m"
fi
}
stop
start