您当前位置:lerx平台搭建
本类热点
推荐阅读
文章正文
Linux下Tomcat加入系统服务
2012-12-30 13:42:23
lzh

Tomcat官方发行版本,提供了startup.sh执行程序。有时候,我们需要将其加入自启动,以防服务器断电重启带来网站无法访问。

方法有两种:

最简单的是修改 /etc/rc.d/rc.local,将 Tomcat 的启动命令加进去。如:

#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.

touch /var/lock/subsys/local
source /etc/profile
/usr/local/tomcat/bin/startup.sh

有些人喜欢用 ntsysv 控制,这种方法就不适用了,而且这种方法不可以使用 service tomcat start|stop|restart 的方式来启动、停止有重启。这时候,我们就需要在 /etc/init.d/ 下提供一个shell脚本来的供此功能。

一些Linux版本中提供了这个shell,如:Asianux 。但那个脚本不是针对配置文件为server.xm的Tomcat启动的。一般是提供了Tomcat.con为配置文件。这种启动方式,网上的资料几乎没有。因此必须针对我们常用的且资料好找的启动方式来提供shell服务脚本。

网上也很多。也很简单。但大都数在实际运行时是有严重问题的。主要问题是其利用的还是startup.sh和shutdown来启动和停止Tomcat,而shutdown时,常常因为这样和那样的原因服务不能得到及时停止,在重启时出现8080或其它Tomcat启动端口被占用的启动错误。在总结大量实例的基础上,我提供了如下的代码,可以完全避免此类问题。

思路:启动,还是由startup.sh来启动。但停止服务,采用kill进程的方式来完美终结。且对于多实例Tomcat启动也有完美的支持。关于Tomat的多实例,请参阅以下两篇文章:

http://www.lerx.com/html/2012/03/23/151125393.html

http://www.lerx.com/html/2012/05/13/093207745.html

Tomcat 系统服务Shell脚本如下(本例利用两秒钟输出一个小圆点产生进度,避免用户等待疲劳):

#!/bin/bash  
#  
# tomcat: Start/Stop/Restart tomcat  
# author: lzh
# http://www.lerx.com
# chkconfig: 2345 80 20  
# description: Tomcat is a Java Servlet Container  
#  
#  
# match these values to your environment:  
export CATALINA_BASE=/usr/local/tomcat  
export CATALINA_HOME=/usr/local/tomcat  
export CATALINA_TMPDIR=/usr/local/tomcat/temp  
export JRE_HOME=/usr/local/java/jre1.6.0_38  
export CLASSPATH=/usr/local/tomcat/bin/bootstrap.jar  
export JAVA_HOME=/usr/local/java/jre1.6.0_38
tomcat_e=/var/lock/subsys/tomcat

RETVAL=0
prog="tomcat"

# Source function library.  
. /etc/rc.d/init.d/functions  

# Source networking configuration.
. /etc/sysconfig/network

TOMCAT_PROCESS_STR=`ps aux | grep 'java.*tomcat' | grep -v grep`
PROCESS_ARRAY=(${TOMCAT_PROCESS_STR// / })
TOMCAT_PROCESS_ID=${PROCESS_ARRAY[1]}


start(){  
	if [ -e $tomcat_e ];then
		echo -n "$prog: allready running"
		exit 1
	fi

	echo -n $"Starting $prog: " 
	echo -e "\n"
        $CATALINA_HOME/bin/startup.sh  
	touch $tomcat_e
            
}  

stop(){  
       
	echo -n $"Stopping $prog: "

	for ((a=1;a<=100;a++))
	do
		CHECK_STR_LENGTH=0
		TOMCAT_PROCESS_CHECK_STR=`ps aux | grep 'java.*tomcat' | grep -v grep`
		CHECK_STR_LENGTH=${#TOMCAT_PROCESS_CHECK_STR}
		
		if [ $CHECK_STR_LENGTH != 0 ]
		then
			kill $TOMCAT_PROCESS_ID
			
			sleep 2
			echo -n .
		else
			
			break
		fi
	
	done
	echo -e "\n"
	rm -f $tomcat_e

}

  
case "$1" in  
start)  
    start  
    ;;  
stop)  
    stop  
    ;;  
restart)  
    stop 
    start  
    ;; 
*)  
    echo -n $"Usage: $0 {start|stop|restart}"  
    ;;  
esac  
exit $RETVAL 

如果采用了多实际,可以编写一个多实例的tomcat启动脚本,如保存为:/usr/local/bin/tomcatall.sh。再将上面的$CATALINA_HOME/bin/startup.sh替换为/usr/local/bin/tomcatall.sh即可。内容如下:

#!/bin/bash
# http://www.lerx.com
# author:lzh
export CATALINA_HOME="/usr/local/tomcat"
export USER_ROOT="/home"   # 所有的虚拟主机家目录都在此处
export USER_HOMES=`ls ${USER_ROOT}`
#export JAVA_OPTS="-Xms128m -Xmx256m  -Xss512K -XX:PermSize=64m -XX:MaxPermSize=128m"

source /etc/profile

for x in ${USER_HOMES}
do
        export CATALINA_BASE=${USER_ROOT}/${x}
        echo "Starting server: ${x} with CATALINA_BASE=${CATALINA_BASE}"
        #export CATALINA_BASE
        ${CATALINA_HOME}/bin/startup.sh
done
~

附:加入系统服务方法:

将Tomcat 系统服务Shell另存为tomcat文件。注意:没有扩展名。在windows下编辑再传到linux系统中,常常会发生找不到命令的错误,最好是在linux中,利用vi编辑器,然后粘贴进去。步骤如下:

利用putty或xshell登录linux主机,然后按如下操作:

vi /etc/init.d/tomcat

按Insert变更vi编辑器为插入模式。

在window中,选中全部脚本,复制。

在linux的vi编辑器中点击鼠标右键,即将脚本粘贴进去。

按Esc键退入插入模式。

按Shift键和英文冒号键,此时编辑器进入命令模式,最下方出现了冒号提示符。如下图。


再输入wq按回车保存并退出。

最后,在终端中输入 chmod 755 /etc/init.d/tomcat 给矛执行权限,再加入系统服务即可。

chmod 755 /etc/init.d/tomcat
chkconfig --add tomcat

这时可以测试一下三个命令:

service tomcat stop
service tomcat restart
service tomcat stop

 效果如下图:

这种方式唯一的遗憾是不能象其它服务一样,在完成后在后面产生一个[OK]或[确定],如下图。也有可能是我对shell命令了解过少。