免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3156 | 回复: 4

[Web] 安装版TOMCAT该怎么启动? [复制链接]

论坛徽章:
0
发表于 2015-12-10 18:33 |显示全部楼层
5可用积分
本帖最后由 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 内容

  1. #!/bin/bash

  2. if [ -r /usr/share/java-utils/java-functions ]; then
  3.   . /usr/share/java-utils/java-functions
  4. else
  5.   echo "Can't read Java functions library, aborting"
  6.   exit 1
  7. fi

  8. # Get the tomcat config (use this for environment specific settings)
  9. if [ -z "${TOMCAT_CFG}" ]; then
  10.   TOMCAT_CFG="/etc/tomcat/tomcat.conf"
  11. fi

  12. if [ -r "$TOMCAT_CFG" ]; then
  13.   . $TOMCAT_CFG
  14. fi

  15. ##################修改部分开始###################

  16. if [ ! -z "$2" ];then
  17.     NAME="$2"
  18. fi

  19. # Get instance specific config file
  20. if [ ! -r "/etc/sysconfig/${NAME}" ]; then
  21.     NAME="${NAME}.conf"
  22. fi

  23. if [ -r "/etc/sysconfig/${NAME}" ]; then
  24.     PRG="/etc/sysconfig/${NAME}"
  25.     . ${PRG}
  26. fi

  27. ################修改部分结束####################

  28. set_javacmd

  29. cd ${CATALINA_HOME}
  30. # CLASSPATH munging
  31. if [ ! -z "$CLASSPATH" ] ; then
  32.   CLASSPATH="$CLASSPATH":
  33. fi

  34. if [ -n "$JSSE_HOME" ]; then
  35.   CLASSPATH="${CLASSPATH}$(build-classpath jcert jnet jsse 2>/dev/null):"
  36. fi
  37. CLASSPATH="${CLASSPATH}${CATALINA_HOME}/bin/bootstrap.jar"
  38. CLASSPATH="${CLASSPATH}:${CATALINA_HOME}/bin/tomcat-juli.jar"
  39. CLASSPATH="${CLASSPATH}:$(build-classpath commons-daemon 2>/dev/null)"

  40. if [ "$1" = "start" ]; then
  41.   ${JAVACMD} $JAVA_OPTS $CATALINA_OPTS \
  42.     -classpath "$CLASSPATH" \
  43.     -Dcatalina.base="$CATALINA_BASE" \
  44.     -Dcatalina.home="$CATALINA_HOME" \
  45.     -Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS" \
  46.     -Djava.io.tmpdir="$CATALINA_TMPDIR" \
  47.     -Djava.util.logging.config.file="${CATALINA_BASE}/conf/logging.properties" \
  48.     -Djava.util.logging.manager="org.apache.juli.ClassLoaderLogManager" \
  49.     org.apache.catalina.startup.Bootstrap start \
  50.     >> ${CATALINA_BASE}/logs/catalina.out 2>&1 &
  51.     if [ ! -z "$CATALINA_PID" ]; then
  52.       echo $! > $CATALINA_PID
  53.     fi
  54. elif [ "$1" = "start-security" ]; then
  55.   ${JAVACMD} $JAVA_OPTS $CATALINA_OPTS \
  56.     -classpath "$CLASSPATH" \
  57.     -Dcatalina.base="$CATALINA_BASE" \
  58.     -Dcatalina.home="$CATALINA_HOME" \
  59.     -Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS" \
  60.     -Djava.io.tmpdir="$CATALINA_TMPDIR" \
  61.     -Djava.security.manager \
  62.     -Djava.security.policy=="${CATALINA_BASE}/conf/catalina.policy" \
  63.     -Djava.util.logging.config.file="${CATALINA_BASE}/conf/logging.properties" \
  64.     -Djava.util.logging.manager="org.apache.juli.ClassLoaderLogManager" \
  65.     org.apache.catalina.startup.Bootstrap start \
  66.     >> ${CATALINA_BASE}/logs/catalina.out 2>&1 &
  67.     if [ ! -z "$CATALINA_PID" ]; then
  68.       echo $! > $CATALINA_PID
  69.     fi
  70. elif [ "$1" = "stop" ]; then
  71.   ${JAVACMD} $JAVA_OPTS \
  72.     -classpath "$CLASSPATH" \
  73.     -Dcatalina.base="$CATALINA_BASE" \
  74.     -Dcatalina.home="$CATALINA_HOME" \
  75.     -Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS" \
  76.     -Djava.io.tmpdir="$CATALINA_TMPDIR" \
  77.     org.apache.catalina.startup.Bootstrap stop \
  78.     >> ${CATALINA_BASE}/logs/catalina.out 2>&1
  79. elif [ "$1" = "version" ]; then
  80.   ${JAVACMD} -classpath ${CATALINA_HOME}/lib/catalina.jar \
  81.     org.apache.catalina.util.ServerInfo
  82. else
  83.   echo "Usage: $0 {start|start-security|stop|version}"
  84.   exit 1
  85. fi
复制代码


启动命令行 tomcat start tomcat-default

/etc/sysconfig/tomcat-default.conf 链接目标 /data/tomcat/configs/default/bin/catalina.sh

/data/tomcat/configs/default/bin/catalina.sh 脚本内容


  1. #!/bin/sh
  2. # resolve links - $0 may be a softlink
  3. if [ -z "${PRG}" ]; then
  4.     PRG="$0"
  5. fi

  6. while [ -h "$PRG" ]; do
  7.   ls=`ls -ld "$PRG"`
  8.   link=`expr "$ls" : '.*-> \(.*\)
  9.   if expr "$link" : '/.*' > /dev/null; then
  10.     PRG="$link"
  11.   else
  12.     PRG=`dirname "$PRG"`/"$link"
  13.   fi
  14. done

  15. # Get standard environment variables
  16. PRGDIR=`dirname "$PRG"`

  17. # Only set CATALINA_HOME if not already set
  18. #[ -z "$CATALINA_HOME" ] && CATALINA_HOME=`cd "$PRGDIR/.." >/dev/null; pwd`

  19. # Copy CATALINA_BASE from CATALINA_HOME if not already set
  20. #[ -z "$CATALINA_BASE" ] && CATALINA_BASE="$CATALINA_HOME"
  21. [ -z "$CATALINA_BASE" ] && CATALINA_BASE=`cd "$PRGDIR/.." >/dev/null; pwd`

  22. if [ -r "$CATALINA_BASE/bin/setenv.sh" ]; then
  23.   . "$CATALINA_BASE/bin/setenv.sh"
  24. elif [ -r "$CATALINA_HOME/bin/setenv.sh" ]; then
  25.   . "$CATALINA_HOME/bin/setenv.sh"
  26. fi
复制代码


/data/tomcat/configs/default/bin/setenv.sh 脚本

  1. #add tomcat pid
  2. CATALINA_PID="$CATALINA_BASE/tomcat.pid"
  3. #add java opts
  4. 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 脚本

  1. [Unit]
  2. Description=tomcat-default
  3. After=network.target
  4.    
  5. [Service]
  6. PIDFile=/data/tomcat/configs/default/tomcat.pid
  7. Type=forking  
  8. ExecStart=/usr/sbin/tomcat start tomcat-default
  9. ExecReload=/usr/sbin/tomcat restart tomcat-default
  10. ExecStop=/usr/sbin/tomcat stop tomcat-default
  11. PrivateTmp=true  
  12.    
  13. [Install]  
  14. WantedBy=multi-user.target
复制代码


以上服务配置多个后,倒是启动OK。

但是,当我使用解压版进行处理时,如果是在CATALINA_HOME下的站点(CATALINA_BASE与CATALINA_HOME相同)时启动成功,而把这些复制出去就失败了。`

论坛徽章:
0
发表于 2015-12-11 11:06 |显示全部楼层
跟踪了下日志信息,发现报告了一些错误(catalina.2015-12-11.log),内容如下:


  1. Dec 11, 2015 10:49:04 AM org.apache.catalina.startup.ClassLoaderFactory validateFile
  2. WARNING: Problem with directory [/usr/share/tomcat/"/data/tomcat/configs/default/lib"], exists: [false], isDirectory: [false], canRead: [false]
  3. Dec 11, 2015 10:49:04 AM org.apache.catalina.startup.ClassLoaderFactory validateFile
  4. WARNING: Problem with directory [/usr/share/tomcat/"/data/tomcat/configs/default/lib/*.jar"], exists: [false], isDirectory: [false], canRead: [false]
  5. Dec 11, 2015 10:49:04 AM org.apache.catalina.startup.ClassLoaderFactory validateFile
  6. WARNING: Problem with directory [/usr/share/tomcat/"/usr/share/tomcat/lib"], exists: [false], isDirectory: [false], canRead: [false]
  7. Dec 11, 2015 10:49:04 AM org.apache.catalina.startup.ClassLoaderFactory validateFile
  8. WARNING: Problem with directory [/usr/share/tomcat/"/usr/share/tomcat/lib/*.jar"], exists: [false], isDirectory: [false], canRead: [false]

复制代码
跟踪 start 的启动命令字符串的配置数据(结果命令行)是这样的:


  1. /usr/lib/jvm/jre/bin/java \
  2.                                        -server \
  3.                                        -XX:PermSize=256M \
  4.                                        -XX:MaxPermSize=1024m \
  5.                                        -Xms512M \
  6.                                        -Xmx1024M \
  7.                                        -XX:MaxNewSize=256m \
  8.                                        -classpath /usr/share/tomcat/bin/bootstrap.jar:/usr/share/tomcat/bin/tomcat-juli.jar:/usr/share/java/commons-daemon.jar \
  9.                                        -Dcatalina.base=/data/tomcat/configs/default \
  10.                                        -Dcatalina.home=/usr/share/tomcat \
  11.                                        -Djava.endorsed.dirs= \
  12.                                        -Djava.io.tmpdir=/var/cache/tomcat/temp \
  13.                                        -Djava.util.logging.config.file=/data/tomcat/configs/default/conf/logging.properties \
  14.                                        -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager \
  15.                                        org.apache.catalina.startup.Bootstrap start >> /data/tomcat/configs/default/logs/catalina.out 2 > &1
复制代码
上述命令行中的参数 路径 和 文件 都是正确的。

但奇怪,为什么会有 将 catalina.home 和 catalina.base 组合出路径出来。

论坛徽章:
218
2022北京冬奥会纪念版徽章
日期:2015-08-10 16:30:3215-16赛季CBA联赛之上海
日期:2019-09-20 12:29:32操作系统版块每日发帖之星
日期:2016-03-02 06:20:00操作系统版块每日发帖之星
日期:2016-03-01 06:20:00操作系统版块每日发帖之星
日期:2016-02-18 06:20:00操作系统版块每日发帖之星
日期:2016-05-10 19:22:58操作系统版块每日发帖之星
日期:2016-05-10 19:22:58操作系统版块每日发帖之星
日期:2016-05-10 19:22:58月度论坛发贴之星
日期:2016-01-31 22:25:02操作系统版块每日发帖之星
日期:2016-05-10 19:22:58操作系统版块每日发帖之星
日期:2016-05-10 19:22:58操作系统版块每日发帖之星
日期:2016-05-10 19:22:58
发表于 2015-12-12 09:41 |显示全部楼层
你应该习惯安装版本的tomcat,这样服务器补丁有官方在维护

论坛徽章:
0
发表于 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 才可以。

谢谢。拜托!





   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

SACC2019中国系统架构师大会

【数字转型 架构演进】SACC2019中国系统架构师大会
2019年10月31日~11月2日第11届中国系统架构师大会(SACC2019)将在北京隆重召开。四大主线并行的演讲模式,1个主会场、20个技术专场、超千人参与的会议规模,100+来自互联网、金融、制造业、电商等领域的嘉宾阵容,将为广大参会者提供一场最具价值的技术交流盛会。




----------------------------------------

大会官网>>
  

北京盛拓优讯信息技术有限公司. 版权所有 16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122
中国互联网协会会员  联系我们:huangweiwei@it168.com
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP