服务器配置: HP ProLiant DL165 G5
双路四核64bit AMD Opteron, 4G内存
操作系统选用CentOS 5.4 x86_64,不安装任何GUI及组件,并使用yum更新。
OpenJDK是开源的JAVA开发工具,目前已经可以很好地兼容J2SE SDK。本次配置选用OpenJDK作为tomcat运行支持环境。
OpenJDK提供的JRE大约有76M多,但是devel包却只有31M
引用
[root@idp ~]# yum makecache && yum search openjdk
[root@idp ~]# yum install java-1.6.0-openjdk-devel
[root@idp ~]# rpm -qa --qf '%10{SIZE}\t%{NAME}\n'| grep java
31996120 java-1.6.0-openjdk-devel
76344762 java-1.6.0-openjdk
[root@idp ~]# yum install java-1.6.0-openjdk-devel
[root@idp ~]# rpm -qa --qf '%10{SIZE}\t%{NAME}\n'| grep java
31996120 java-1.6.0-openjdk-devel
76344762 java-1.6.0-openjdk
验证安装是否正确:
引用
[root@idp ~]# java -version
java version "1.6.0"
OpenJDK Runtime Environment (build 1.6.0-b09)
OpenJDK 64-Bit Server VM (build 1.6.0-b09, mixed mode)
java version "1.6.0"
OpenJDK Runtime Environment (build 1.6.0-b09)
OpenJDK 64-Bit Server VM (build 1.6.0-b09, mixed mode)
下载tomcat6,解压后将文件夹移动至/opt目录下,并重命名
引用
[root@idp ~]# wget http://apache.freelamp.com/tomcat/tomcat-6/v6.0.20/bin/apache-tomcat-6.0.20.tar.gz
[root@idp ~]# tar -xvf apache-tomcat-6.0.20.tar.gz
[root@idp ~]# mv apache-tomcat-6.0.20 /opt
[root@idp ~]# link -s /opt/{apache-tomcat-6.0.20,tomcat}
[root@idp ~]# tar -xvf apache-tomcat-6.0.20.tar.gz
[root@idp ~]# mv apache-tomcat-6.0.20 /opt
[root@idp ~]# link -s /opt/{apache-tomcat-6.0.20,tomcat}
删除不必要的文件
引用
[root@idp ~]# cd /opt/tomcat/bin
[root@idp bin]# rm *.exe *.bat
[root@idp bin]# cd /opt/tomcat/webapps
[root@idp webapps]# rm -rf docs examples
为方便操作,建立一个软链接
引用
ln -s /opt/tomcat/bin/catalina.sh /usr/bin/tomcat
设置必须的全局shell变量,这里设置Xms为2048m,因为服务器的内存为4G,根据即将安装的Shibboleth IdP文档推荐配置为最大内存的一半。
引用
[root@idp ~]# echo 'export JAVA_HOME=/usr/lib/jvm/java' >> /etc/profile
[root@idp ~]# echo 'export CATALINA_HOME=/opt/tomcat-6/' >> /etc/profile
[root@idp ~]# echo 'export CATALINA_BASE=/opt/tomcat-6/' >> /etc/profile
[root@idp ~]# echo 'export CATALINA_OPTS="-Xms2048m -Xmx2048m"' >> /etc/profile
[root@idp ~]# source /etc/profile
现在可以尝试启动tomcat,成功运行后可以看到8080和8009端口都已经开启,可以使用links或者其它浏览访问
引用
[root@idp ~]# /opt/tomcat-6/bin/startup.sh
Using CATALINA_BASE: /opt/tomcat-6/
Using CATALINA_HOME: /opt/tomcat-6/
Using CATALINA_TMPDIR: /opt/tomcat-6//temp
Using JRE_HOME: /usr/lib/jvm/jre
[root@idp ~]# netstat -ant
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 ::ffff:127.0.0.1:8005 :::* LISTEN
tcp 0 0 :::8009 :::* LISTEN
tcp 0 0 :::8080 :::* LISTEN
Using CATALINA_BASE: /opt/tomcat-6/
Using CATALINA_HOME: /opt/tomcat-6/
Using CATALINA_TMPDIR: /opt/tomcat-6//temp
Using JRE_HOME: /usr/lib/jvm/jre
[root@idp ~]# netstat -ant
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 ::ffff:127.0.0.1:8005 :::* LISTEN
tcp 0 0 :::8009 :::* LISTEN
tcp 0 0 :::8080 :::* LISTEN
配置tomcat开机时以daemon运行。
首先停止以root身份运行的tomcat服务
引用
[root@idp ~]# /opt/tomcat-6/bin/shutdown.sh
建立一个普通用户tomcat,用于启动、停止tomcat服务,避免使用root账户,减少安全漏洞
引用
[root@idp ~]# /usr/sbin/useradd -r --home-dir /opt/tomcat -M --groups nobody --shell /bin/false tomcat6
[root@idp ~]# chown -R tomcat6:tomcat6 apache-tomcat-6.0.18
jsvc-src目录下面提供了一个用于配置daemon的示例脚本,稍作修改即可应用于chkconfig
引用
[root@idp ~]# cat /etc/init.d/tomcat
#!/bin/sh
#
# tomcat Startup script for the Apache Tomcat Server
#
# chkconfig: 234 80 83
#
# Modified by Michael ZHANG
# http://www.wardking.com/blog
# hualng@yahoo.com.cn
#
### BEGIN INIT INFO
# Provides: tomcat6
# Required-Start: $local_fs $network $syslog
# Should-Start: namcd
# Required-Stop:
# Default-Start: 3 2 4 5
# Default-Stop: 1 6
# Short-Description: Tomcat 6.0 Servlet Engine
# Description: Tomcat 6.0 is the Apache Servlet
### END INIT INFO
# Source function library.
if [ -x /etc/rc.d/init.d/functions ]; then
. /etc/rc.d/init.d/functions
fi
JAVA_HOME=/usr/lib/jvm/java/
export JAVA_HOME
CATALINA_OPTS="-Xms2048M -Xmx2048M -XX:MaxPermSize=2048M -XX:-DisableExplicitGC -server"
TOMCAT5_SECURITY=no
CATALINA_HOME=/opt/tomcat
export CATALINA_HOME
TOMCAT_USER=tomcat6
TOMCAT_GROUP=tomcat6
CATALINA_PID=/var/run/tomcat.pid
export CATALINA_PID
# Time to wait in seconds, before killing process
SHUTDOWN_WAIT=30
# Path to the tomcat launch script (direct don't use wrapper)
TOMCAT_SCRIPT=/opt/tomcat/bin/catalina.sh
# Tomcat name
TOMCAT_PROG=/opt/tomcat/bin/catalina.sh
# if TOMCAT_USER is not set, use tomcat4 like Apache HTTP server
if [ -z "$TOMCAT_USER" ]; then
TOMCAT_USER="tomcat"
fi
# if TOMCAT_GROUP is not set, use tomcat4 like Apache HTTP server
if [ -z "$TOMCAT_GROUP" ]; then
TOMCAT_GROUP=$TOMCAT_USER
fi
# Since the daemon function will sandbox $tomcat
# no environment stuff should be defined here anymore.
# Please use the /etc/tomcat.conf file instead ; it will
# be read by the $tomcat script
RETVAL=0
# See how we were called.
start() {
echo "Starting $TOMCAT_PROG: "
if [ -f /var/run/tomcat6.pid ] ; then
CATALINA_PID=/var/run/tomcat6.pid
if [ -f /proc/`cat $CATALINA_PID`/cmdline ] ; then
if grep -ic catalina /proc/`cat $CATALINA_PID`/cmdline ; then
echo "process already running"
return -1
fi
fi
fi
export CATALINA_PID=/var/run/tomcat6.pid
touch $CATALINA_PID
chown $TOMCAT_USER:$TOMCAT_GROUP $CATALINA_PID
su -p -s /bin/sh $TOMCAT_USER -c "\"$TOMCAT_SCRIPT\" start"
RETVAL=$?
echo
[ $RETVAL = 0 ] && touch /var/lock/subsys/tomcat6
return $RETVAL
}
stop() {
echo "Stopping $TOMCAT_PROG: "
if [ -f /var/lock/subsys/tomcat6 ] ; then
su -p -s /bin/sh $TOMCAT_USER -c "$TOMCAT_SCRIPT stop"
RETVAL=$?
if [ $RETVAL = 0 ]; then
count=0;
if [ -f /var/run/tomcat6.pid ]; then
read kpid < /var/run/tomcat6.pid
let kwait=$SHUTDOWN_WAIT
until [ `ps --pid $kpid | grep -c $kpid` = '0' ] || [ $count -gt $kwait ]
do
echo
echo -n "waiting for processes to exit";
sleep 1
let count=$count+1;
done
if [ $count -gt $kwait ]; then
echo
echo -n "killing processes which didn't stop after $SHUTDOWN_WAIT seconds"
kill -9 $kpid
fi
fi
rm -f /var/lock/subsys/tomcat6 /var/run/tomcat6.pid
fi
fi
echo
}
# See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
sleep 2
start
;;
condrestart)
if [ -f /var/run/tomcat6.pid ] ; then
stop
start
fi
;;
*)
echo "Usage: $TOMCAT_PROG
{start\|stop\|restart\|condrestart}
"
exit 1
esac
exit $RETVAL
[root@idp ~]# chmod +x /etc/init.d/tomcat
[root@idp ~]# chkconfig --add tomcat
[root@idp ~]# chkconfig tomcat on
[root@idp ~]# service tomcat start
Starting /opt/tomcat/bin/catalina.sh:
Using CATALINA_BASE: /opt/tomcat
Using CATALINA_HOME: /opt/tomcat
Using CATALINA_TMPDIR: /opt/tomcat/temp
Using JRE_HOME: /usr/lib/jvm/java/
到这一步,已经完全配置好tomcat,并实现系统启动时自动运行。
编写一个简单的jsp程序,检验tomcat运行状况
引用
[root@idp ROOT]# pwd
/opt/tomcat-6/webapps/ROOT
[root@idp ROOT]# cat index.jsp
<%@ page import="java.util.*" %>
<html>
<body>
<center>
<p> </p>
<p> </p>
<p> </p>
<h2>Shibboleth 2</h2>
<p> </p>
<p style="color:#ff0000">coming soon...</p>
<p> </p>
<%
System.out.println( "Evaluating date now" );
Date date = new Date();
%>
<address><%= date %></address>
<p>For any question about this project, please contact with Michael ZHANG, Information Services.</p>
<address>The University of Nottingham Ningbo, China</address>
<center>
通过浏览器访问: http://localhost:8080 可以查看到服务器当前时间输出。



4 Responses
Starting /opt/tomcat/bin/catalina.sh:
0
Using CATALINA_BASE: /opt/tomcat
Using CATALINA_HOME: /opt/tomcat
Using CATALINA_TMPDIR: /opt/tomcat/temp
Using JRE_HOME: /usr/lib/jvm/java/
Using CLASSPATH: /opt/tomcat/bin/bootstrap.jar
PID file (/var/run/tomcat6.pid) found. Is Tomcat still running? Start aborted.
[root@idp run]# cat /var/run/tomcat6.pid
[root@idp run]#