Chinaunix
标题:
安装版TOMCAT该怎么启动?
[打印本页]
作者:
daview
时间:
2015-12-10 18:33
标题:
安装版TOMCAT该怎么启动?
本帖最后由 daview 于 2015-12-10 18:41 编辑
在网上搜索了TOMCAT的配置之类的文档,都是基于解压版本的。
我现在需要使用安装版来启动服务,遇到几个问题:
环境:
操作系统:CentOS 7 64位
TOMCAT:通过 yum install tomcat 方式安装(7.0版本,貌似还不支持这样方式安装8.0或9.0版本)
问题:
1、文件 /usr/sbin/tomcat 运行报告错误,其中用到外部脚本文件 /etc/sysconfig/${NAME}。
请问,这个 $NAME 在哪里配置的?我在CentOS的service配置里写NAME属性没用,在启动参数里写也没用。
目前是通过强制的使用该命令的 第二个参数,也就是 $2 来设置
修改后的 /usr/sbin/tomcat 内容
#!/bin/bash
if [ -r /usr/share/java-utils/java-functions ]; then
. /usr/share/java-utils/java-functions
else
echo "Can't read Java functions library, aborting"
exit 1
fi
# Get the tomcat config (use this for environment specific settings)
if [ -z "${TOMCAT_CFG}" ]; then
TOMCAT_CFG="/etc/tomcat/tomcat.conf"
fi
if [ -r "$TOMCAT_CFG" ]; then
. $TOMCAT_CFG
fi
##################修改部分开始###################
if [ ! -z "$2" ];then
NAME="$2"
fi
# Get instance specific config file
if [ ! -r "/etc/sysconfig/${NAME}" ]; then
NAME="${NAME}.conf"
fi
if [ -r "/etc/sysconfig/${NAME}" ]; then
PRG="/etc/sysconfig/${NAME}"
. ${PRG}
fi
################修改部分结束####################
set_javacmd
cd ${CATALINA_HOME}
# CLASSPATH munging
if [ ! -z "$CLASSPATH" ] ; then
CLASSPATH="$CLASSPATH":
fi
if [ -n "$JSSE_HOME" ]; then
CLASSPATH="${CLASSPATH}$(build-classpath jcert jnet jsse 2>/dev/null):"
fi
CLASSPATH="${CLASSPATH}${CATALINA_HOME}/bin/bootstrap.jar"
CLASSPATH="${CLASSPATH}:${CATALINA_HOME}/bin/tomcat-juli.jar"
CLASSPATH="${CLASSPATH}:$(build-classpath commons-daemon 2>/dev/null)"
if [ "$1" = "start" ]; then
${JAVACMD} $JAVA_OPTS $CATALINA_OPTS \
-classpath "$CLASSPATH" \
-Dcatalina.base="$CATALINA_BASE" \
-Dcatalina.home="$CATALINA_HOME" \
-Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS" \
-Djava.io.tmpdir="$CATALINA_TMPDIR" \
-Djava.util.logging.config.file="${CATALINA_BASE}/conf/logging.properties" \
-Djava.util.logging.manager="org.apache.juli.ClassLoaderLogManager" \
org.apache.catalina.startup.Bootstrap start \
>> ${CATALINA_BASE}/logs/catalina.out 2>&1 &
if [ ! -z "$CATALINA_PID" ]; then
echo $! > $CATALINA_PID
fi
elif [ "$1" = "start-security" ]; then
${JAVACMD} $JAVA_OPTS $CATALINA_OPTS \
-classpath "$CLASSPATH" \
-Dcatalina.base="$CATALINA_BASE" \
-Dcatalina.home="$CATALINA_HOME" \
-Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS" \
-Djava.io.tmpdir="$CATALINA_TMPDIR" \
-Djava.security.manager \
-Djava.security.policy=="${CATALINA_BASE}/conf/catalina.policy" \
-Djava.util.logging.config.file="${CATALINA_BASE}/conf/logging.properties" \
-Djava.util.logging.manager="org.apache.juli.ClassLoaderLogManager" \
org.apache.catalina.startup.Bootstrap start \
>> ${CATALINA_BASE}/logs/catalina.out 2>&1 &
if [ ! -z "$CATALINA_PID" ]; then
echo $! > $CATALINA_PID
fi
elif [ "$1" = "stop" ]; then
${JAVACMD} $JAVA_OPTS \
-classpath "$CLASSPATH" \
-Dcatalina.base="$CATALINA_BASE" \
-Dcatalina.home="$CATALINA_HOME" \
-Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS" \
-Djava.io.tmpdir="$CATALINA_TMPDIR" \
org.apache.catalina.startup.Bootstrap stop \
>> ${CATALINA_BASE}/logs/catalina.out 2>&1
elif [ "$1" = "version" ]; then
${JAVACMD} -classpath ${CATALINA_HOME}/lib/catalina.jar \
org.apache.catalina.util.ServerInfo
else
echo "Usage: $0 {start|start-security|stop|version}"
exit 1
fi
复制代码
启动命令行 tomcat start tomcat-default
/etc/sysconfig/tomcat-default.conf 链接目标 /data/tomcat/configs/default/bin/catalina.sh
/data/tomcat/configs/default/bin/catalina.sh 脚本内容
#!/bin/sh
# resolve links - $0 may be a softlink
if [ -z "${PRG}" ]; then
PRG="$0"
fi
while [ -h "$PRG" ]; do
ls=`ls -ld "$PRG"`
link=`expr "$ls" : '.*-> \(.*\)
if expr "$link" : '/.*' > /dev/null; then
PRG="$link"
else
PRG=`dirname "$PRG"`/"$link"
fi
done
# Get standard environment variables
PRGDIR=`dirname "$PRG"`
# Only set CATALINA_HOME if not already set
#[ -z "$CATALINA_HOME" ] && CATALINA_HOME=`cd "$PRGDIR/.." >/dev/null; pwd`
# Copy CATALINA_BASE from CATALINA_HOME if not already set
#[ -z "$CATALINA_BASE" ] && CATALINA_BASE="$CATALINA_HOME"
[ -z "$CATALINA_BASE" ] && CATALINA_BASE=`cd "$PRGDIR/.." >/dev/null; pwd`
if [ -r "$CATALINA_BASE/bin/setenv.sh" ]; then
. "$CATALINA_BASE/bin/setenv.sh"
elif [ -r "$CATALINA_HOME/bin/setenv.sh" ]; then
. "$CATALINA_HOME/bin/setenv.sh"
fi
复制代码
/data/tomcat/configs/default/bin/setenv.sh 脚本
#add tomcat pid
CATALINA_PID="$CATALINA_BASE/tomcat.pid"
#add java opts
JAVA_OPTS="-server -XX:PermSize=256M -XX:MaxPermSize=1024m -Xms512M -Xmx1024M -XX:MaxNewSize=256m"
复制代码
2、强制步骤1后,运行 /usr/sbin/tomcat start tomcat-default,没发现有服务监听端口(通过服务的方式启动也没有发现监听接口),也没发现tomcat报告错误。
3、我是希望定义多个独立的tomcat实例(只是站点配置必须文件不同,共享一套程序),让服务在开机启动时自动启动。
tomcat-default.service 脚本
[Unit]
Description=tomcat-default
After=network.target
[Service]
PIDFile=/data/tomcat/configs/default/tomcat.pid
Type=forking
ExecStart=/usr/sbin/tomcat start tomcat-default
ExecReload=/usr/sbin/tomcat restart tomcat-default
ExecStop=/usr/sbin/tomcat stop tomcat-default
PrivateTmp=true
[Install]
WantedBy=multi-user.target
复制代码
以上服务配置多个后,倒是启动OK。
但是,当我使用解压版进行处理时,如果是在CATALINA_HOME下的站点(CATALINA_BASE与CATALINA_HOME相同)时启动成功,而把这些复制出去就失败了。`
作者:
daview
时间:
2015-12-11 11:06
跟踪了下日志信息,发现报告了一些错误(catalina.2015-12-11.log),内容如下:
Dec 11, 2015 10:49:04 AM org.apache.catalina.startup.ClassLoaderFactory validateFile
WARNING: Problem with directory [/usr/share/tomcat/"/data/tomcat/configs/default/lib"], exists: [false], isDirectory: [false], canRead: [false]
Dec 11, 2015 10:49:04 AM org.apache.catalina.startup.ClassLoaderFactory validateFile
WARNING: Problem with directory [/usr/share/tomcat/"/data/tomcat/configs/default/lib/*.jar"], exists: [false], isDirectory: [false], canRead: [false]
Dec 11, 2015 10:49:04 AM org.apache.catalina.startup.ClassLoaderFactory validateFile
WARNING: Problem with directory [/usr/share/tomcat/"/usr/share/tomcat/lib"], exists: [false], isDirectory: [false], canRead: [false]
Dec 11, 2015 10:49:04 AM org.apache.catalina.startup.ClassLoaderFactory validateFile
WARNING: Problem with directory [/usr/share/tomcat/"/usr/share/tomcat/lib/*.jar"], exists: [false], isDirectory: [false], canRead: [false]
复制代码
跟踪 start 的启动命令字符串的配置数据(结果命令行)是这样的:
/usr/lib/jvm/jre/bin/java \
-server \
-XX:PermSize=256M \
-XX:MaxPermSize=1024m \
-Xms512M \
-Xmx1024M \
-XX:MaxNewSize=256m \
-classpath /usr/share/tomcat/bin/bootstrap.jar:/usr/share/tomcat/bin/tomcat-juli.jar:/usr/share/java/commons-daemon.jar \
-Dcatalina.base=/data/tomcat/configs/default \
-Dcatalina.home=/usr/share/tomcat \
-Djava.endorsed.dirs= \
-Djava.io.tmpdir=/var/cache/tomcat/temp \
-Djava.util.logging.config.file=/data/tomcat/configs/default/conf/logging.properties \
-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager \
org.apache.catalina.startup.Bootstrap start >> /data/tomcat/configs/default/logs/catalina.out 2 > &1
复制代码
上述命令行中的参数 路径 和 文件 都是正确的。
但奇怪,为什么会有 将 catalina.home 和 catalina.base 组合出路径出来。
作者:
action08
时间:
2015-12-12 09:41
你应该习惯安装版本的tomcat,这样服务器补丁有官方在维护
作者:
daview
时间:
2015-12-14 09:11
回复
3#
action08
恩。就是这个原因,所以我用安装版而不用解压版。
但是遇到这个问题真的费解:
1、关于NAME我通过在ubuntu里安装tomcat已经知道了,应该是centos版本的bug,直接运行 /etc/sysconfig/tomcat 就好
2、很奇怪的是:CATALINA_HOME 和 CATALINA_BASE 必须设置为 /usr/share/tomcat ,否则,运行日志里就会报告 这样的错误信息:
(CATALINA_HOME: /usr/share/tomcat/ , CATALINA_BASE:/data/tomcat/configs/default/ )
WARNING [main] ort.apache.catalina.startup.ClassLoaderFactory.validateFile Problem with directory [/usr/share/tomcat/"/data/tomcat/configs/default/lib"], exists: [false], isDirectory: [false], canRead: [false]
WARNING [main] ort.apache.catalina.startup.ClassLoaderFactory.validateFile Problem with directory [/usr/share/tomcat/"/data/tomcat/configs/default/lib/*.jar"], exists: [false], isDirectory: [false], canRead: [false]
(CATALINA_HOME: /data/tomcat/configs/default/ , CATALINA_BASE:/data/tomcat/configs/default/ )
WARNING [main] ort.apache.catalina.startup.ClassLoaderFactory.validateFile Problem with directory [/data/tomcat/configs/default/"/data/tomcat/configs/default/lib"], exists: [false], isDirectory: [false], canRead: [false]
WARNING [main] ort.apache.catalina.startup.ClassLoaderFactory.validateFile Problem with directory [/data/tomcat/configs/default/tomcat/configs/default/lib/*.jar"], exists: [false], isDirectory: [false], canRead: [false]
这里,/data/tomcat/configs/default/ 是直接复制至 /usr/share/tomcat。只有 CATALINA_HOME 和 CATALINA_BASE 都为 /usr/share/tomcat 才可以。
谢谢。拜托!
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2