在Linux下,用startup.sh能正常启动tomcat,但用shutdown.sh却经常不能正常关掉tomcat,开始我是直接用ps -aux找到tomcat运行的进程号,然后直接Kill掉,但这样比较麻烦,后来我就写了一个服务,放到/etc/init.d下面,直接用server tomcat start来启动tomcat,用server tomcat stop来停止tomcat,现在把我的这个tomcat服务贴出来,分享给大家
vi /etc/init.d/tomcat
#!/bin/sh
TOMCAT_HOME=/usr/local/tomcat
JAVA_HOME=/usr/local/jdk1.6
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
export TOMCAT_HOME JAVA_HOME
start() {
echo -n $"Starting Tomcat6: "
su – tomcat -c $TOMCAT_HOME/bin/startup.sh
ps ax –width=1000 | grep "$JAVA_HOME/bin/java -Djava.util.logging.config.file=$TOMCAT_HOME" | awk '{printf $1 " "}' > $TOMCAT_HOME/tomcat.pid
sleep 1
echo "Tomcat6 is started……"
}
stop() {
echo "Stopping Tomcat6: "
tomcatpid=($(awk '{print $1}' $TOMCAT_HOME/tomcat.pid))
kill -9 $tomcatpid
rm -f $TOMCAT_HOME/tomcat.pid
sleep 1
echo "Tomcat6 is stoped……"
}
status() {
ps ax –width=1000 | grep "[o]rg.apache.catalina.startup.Bootstrap" | awk '{printf $1 " "}' | wc | awk '{print $2}' >/tmp/tomcat_process_count.txt
read line < /tmp/tomcat_process_count.txt
if [ $line -gt 0 ]; then
echo -n "tomcat6 ( pid "
ps ax –width=1000 | grep "[o]rg.apache.catalina.startup.Bootstrap" | awk '{printf $1 " "}'
echo ") is running"
else
echo "Tomcat6 is stopped"
fi
}
case "$1" in
start)
# Start Tomcat
start
exit $?
;;
stop)
# Stop Tomcat
stop
exit $?
;;
restart)
# Restart Tomcat
stop
sleep 3
start
exit $?
;;
status)
status
exit $?
;;
*)
echo "Usage: tomcat6 {start|stop|restart|status}"
exit 1;;
esac
用这个服务,大家还需要改2个地方,就是TOMCAT_HOME=/usr/local/tomcat;JAVA_HOME=/usr/local/jdk1.6,把这连个修改成自己服务器上安装tomcat和jdk的路径
然后保存,给于/etc/init.d/tomcat 执行权限就可以了
其实这种方法不好,直接kill掉tomcat会直接释放掉内存,可能会造成数据的丢失,我之前也用过jsvc的,但是对于服务器上只有一个tomcat,可以用jsvc,但是一台服务器上需要运行多个tomcat的时候,这种方法就无效了。这个tomcat的bug一直没有解决,也是没有办法的办法,如果大家有更好的办法,希望也能分享出来。
转载请注明:LINUX服务器运维架构技术分享 » linux下tomcat关闭服务