• Tomcat基础配置和高级配置


    **********  第一部分 Tomcat基础配置   ***********


    一、Apatch Tomcat 在win下配置

    大部分转载自:http://blog.csdn.net/liuhaomatou/article/details/39893897

    首先从官方网站http://tomcat.apache.org/下载Tomcat,我这里下载的是最新版本的Tomcat8.0

    下载后解压得到:


    进入到bin目录下面:

    运行tomcat8w.exe tomcat8.exe ,提示 指定的服务未安装 unable to open the service 'tomcat8'


    解决方法:

    打开命令行提示符窗口=> 进入Tomcat安装目录==> 进入bin目录下==> 输入:

    service.bat install //这个命令的实质就是给windows安装一个服务

    这个时候会提示:

    The CATALINA_HOME environment variable is not defined correctly 的错误信息。

    这个是因为环境变量没有配置正确导致的。

    解决方法如下:
          1、JAVA_HOME中的路径不能使用分号结尾,如
                 E:Javajdk1.6.0_10;
              这样写就会出现提示CATALINA_HOME或是JAVA_HOME没有配置好的错误,,还有就是JAVA_HOME的路径一定不要写成了JRE的路径
          2、CATALINA_BASE,CATALINA_HOME,TOMCAT_HOME中的路径不能以""结尾,如
                 E:Javaapache-tomcat-6.0.29
              这样写就会出现java.util.logging.ErrorManager的错误,屏幕一闪而过
         正确的写法:
               JAVA_HOME            C:Program FilesJavajdk1.8.0_11
               CATALINA_BASE      D:	oolsapache-tomcat-8.0.14-windows-x64apache-tomcat-8.0.14
               CATALINA_HOME    D:	oolsapache-tomcat-8.0.14-windows-x64apache-tomcat-8.0.14
               TOMCAT_HOME       D:	oolsapache-tomcat-8.0.14-windows-x64apache-tomcat-8.0.14
    事实上,tomcat的核心就是catalina,startup.sh, shutdown.sh本质就是调用catalina命令
    配置好了环境变量后在重新打开运行->cmd->进入到tomcat8.0的bin目录下运行:
    service.bat install</span>
    这个时候就会提示如下信息:
    
    最后在进入到tomcat8.0的解压后的bin目录下运行tomcat8w.exe 即可
    

    在浏览器网页中输入:http://localhost:8080/ 后不能打开,是因为Tomcat没有启动,点击如下图片所示的start按钮即可以启动。

    二、Apatch Tomcat 在Linux 和 MacOS上的配置问题

    1、下载压缩包

    2、解压缩

    3、配置环境变量,这里重点介绍两个方法

    (1)方法一,修改~/.bash_profile文件

    export PATH=$PATH:/Users/fuhua/Documents/Tomcat/apache-tomcat-8.0.30/bin

    完了之后可以在bash中,输入startup.sh, shutdown.sh进行开启和关闭tomcat

    (2)方法二,写一个脚本文件,丢入/usr/bin变为全局命令,更加灵活和方便

    执行方法,bash中输入tomcat start 之类

    1. #!/bin/bash
    2. case $1 in
    3. start)
    4. sh /Library/Tomcat/bin/startup.sh
    5. ;;
    6. stop)
    7. sh /Library/Tomcat/bin/shutdown.sh
    8. ;;
    9. restart)
    10. sh /Library/Tomcat/bin/shutdown.sh
    11. sh /Library/Tomcat/bin/startup.sh
    12. ;;
    13. *)
    14. echo “Usage: start|stop|restart”
    15. ;;
    16. esac
    17. exit 0
    
    

    **********  第二部分 Tomcat高级配置   ***********

    1、修改Tomcat端口

    Tomcat默认监听的是8080端口,如果想修改此端口号,打开

    D:Program Filesapache-tomcat-8.0.3confserver.xml,找到如下代码段,修改port属性即可

    1. <Connector port="8080" protocol="HTTP/1.1"  
    2.                connectionTimeout="20000"  
    3.                redirectPort="8443" />

    2、Tomcat设置https

    (1)制作xx.keystore文件

    在命令行下输入如下命令:

    keytool -genkey -alias tomcat -keyalg RSA -keystore D: est.keystore

    (keytool.exe 在C:Program FilesJavajdk1.7.0_51in目录下。因为已设置jdk环境变量,因此可以在命令行下可直接使用keytool)

    密钥库口令随意填,最后一步的密钥口令也随意填,也可以选择跟密钥库口令一样(按”Enter”键即可)

     

    D盘下可以看到test.keystore 文件

    (2) 修改server.xml

    打开D:Program Filesapache-tomcat-8.0.3confserver.xml,找到如下代码段

    [html] view plain copy
     在CODE上查看代码片派生到我的代码片
    1. <!--  
    2.     <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"  
    3.                maxThreads="150" scheme="https" secure="true"  
    4.                clientAuth="false" sslProtocol="TLS" />  
    5. -->  

    将注释打开,并修改Connector 标签内容,keystorePass为密钥库口令

    [html] view plain copy
    1. <Connector port="8443"   
    2.            protocol="org.apache.coyote.http11.Http11NioProtocol" SSLEnabled="true"  
    3.                maxThreads="150" scheme="https" secure="true"  
    4.            keystoreFile="D: omcat.keystore" keystorePass="password"  
    5.                clientAuth="false" sslProtocol="TLS" />  

    重启Tomcat,在浏览器下输入https://localhost:8443,即可看到Tomcat首页

    3、iOS, Android设置https

    具体实现,参考这篇文章,有点小复杂

    http://blog.csdn.net/wangyadong99/article/details/49124413

    4、Tomcat设置默认WEB项目

    修改后的Host 标签

    [html] view plain copy
     在CODE上查看代码片派生到我的代码片
    1. <Host name="localhost"  appBase="webapps"  
    2.             unpackWARs="true" autoDeploy="true">  
    3.     <Context path="" docBase="examples" reloadable="true" crossContext="true">  
    4.     </Context>  
    5.         <!-- SingleSignOn valve, share authentication between web applications  
    6.              Documentation at: /docs/config/valve.html -->  
    7.         <!-- 
    8.         <Valve className="org.apache.catalina.authenticator.SingleSignOn" /> 
    9.         -->  
    10.    
    11.         <!-- Access log processes all example.  
    12.              Documentation at: /docs/config/valve.html  
    13.              Note: The pattern used is equivalent to using pattern="common" -->  
    14.         <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"  
    15.                prefix="localhost_access_log" suffix=".txt"  
    16.                pattern="%h %l %u %t "%r" %s %b" />  
    17.    
    18.       </Host>  

    重新启动Tomcat,在浏览器下输入http://localhost:8080,即可看到examples的首页

    访问http://localhost:8080/host-manager/index.jsp,会提示输入用户名、密码,点”取消”,会弹出错误页面,根据此错误页面可以找到设置Tomcat账号的办法

    打开D:Program Filesapache-tomcat-8.0.3conf omcat-users.xml,在tomcat-users标签下添加如下内容

    [html] view plain copy
     在CODE上查看代码片派生到我的代码片
    1. <role rolename="admin-gui"/>  
    2.  <user username="tomcat" password="s3cret" roles="admin-gui"/>  

    重启Tomcat,然后访问http://localhost:8080/host-manager/index.jsp,用户名输入tomcat,密码输入s3cret,即可

    5、修改Session有效时间

    默认情况下,Session有效时间为30分钟。打开confweb.xml,修改session-timeout标签的值

    [html] view plain copy
    1. <session-config>  
    2.         <session-timeout >30</session-timeout>  
    3. </session-config>  
    下面的7以后的参考链接:http://my.oschina.net/neochen/blog/146372

    6、maxThreads 连接数限制

    maxThreads 是 Tomcat 所能接受最大连接数。一般设置不要超过8000以上,如果你的网站访问量非常大可能使用运行多个Tomcat实例的方法。

    即,在一个服务器上启动多个tomcat然后做负载均衡处理。

    1. <Connector port="8080" address="localhost"
    2. maxThreads="2048" maxHttpHeaderSize="8192"
    3. emptySessionPath="true" protocol="HTTP/1.1"
    4. enableLookups="false" redirectPort="8181" acceptCount="100"
    5. connectionTimeout="20000" disableUploadTimeout="true" />

    提示

    很多做过php运维的朋友在这里会犯一个大错误,php优化服务器通常怎做法是安装cpu以及内存的情况配置连接数,连接数过万都很正常,但java不同jvm配置要非常小心,稍有差错就会崩溃。

    maxThreads 配置要结合 JVM -Xmx 参数调整,也就是要考虑内存开销。

    虚拟主机

    不要使用Tomcat的虚拟主机,每个站点一个实例。即,启动多个tomcat.

    这也是PHP运维在这里常犯的错误,PHP的做法是一个Web下面放置多个虚拟主机,而不是每个主机启动一个web服务器。Tomcat 是多线程,共享内存,任何一个虚拟主机中的应用出现崩溃,会影响到所有应用程序。采用多个实例方式虽然开销比较大,但保证了应用程序隔离与安全。


    7、压错传输

    通常所说的gzip压缩,Tomcat通过在server.xml配置设置压缩的选项。

    1. <Connector port="8080" protocol="HTTP/1.1"
    2. connectionTimeout="20000"
    3. redirectPort="8443"
    4. compression="on"
    5. compressionMinSize1="2048"
    6. noCompressionUserAgents="gozilla, traviata"
    7. compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain,,application/octet-stream"/>

    提示

    压缩会增加Tomcat负担,最好采用Nginx + Tomcat 或者 Apache + Tomcat 方式,压缩交由Nginx/Apache 去做。


    8、Tomcat 安全配置(保证资源安全)

    8.1 安装后初始化配置

    当Tomcat完成安装后你首先要做的事情如下:

    首次安装完成后立即删除webapps下面的所有代码(已经没有用了)

    rm -rf /srv/apache-tomcat/webapps/*

    注释或删除 tomcat-users.xml 所有用户权限,看上去如下:

    1. # cat conf/tomcat-users.xml
    2. <?xml version='1.0' encoding='utf-8'?>
    3. <tomcat-users>
    4. </tomcat-users>

    隐藏Tomcat版本信息

    1. vim $CATALINA_HOME/conf/server.xml
    2. <Connector port="80" protocol="HTTP/1.1"
    3. connectionTimeout="20000"
    4. redirectPort="8443"
    5. maxThreads="8192"
    6. minSpareThreads="64"
    7. maxSpareThreads="128"
    8. acceptCount="128"
    9. enableLookups="false"
    10. server="Neo App Srv 1.0"/>
    11. # curl -I http://localhost:8080/
    12. HTTP/1.1 400 Bad Request
    13. Transfer-Encoding: chunked
    14. Date: Thu, 20 Oct 2011 09:51:55 GMT
    15. Connection: close
    16. Server: Neo App Srv 1.0

    服务器信息已经被改为 Server: Neo App Srv 1.0

    8.2 启动用户与端口

    不要使用root用户启动tomcat,Java程序与C程序不同。nginx,httpd 使用root用户启动守护80端口,子进程/线程会通过setuid(),setgid()两个函数切换到普通用户。即父进程所有者是root用户,子进程与多线程所有者是一个非root用户,这个用户没有shell,无法通过ssh与控制台登陆系。Java 的JVM 是与系统无关的,是建立在OS之上的,你使用什么用户启动Tomcat,那麽Tomcat 就会继承该所有者的权限。

    这造成了一个问题,Linux系统小于1024的端口只有root可以使用,这也是为什么Tomcat默认端口是8080。如果你想使用80端口只能使用root启动Tomcat。这有带来了很多安全问题。

    解决方案是创建一个不同用户,如:

    1. groupadd -g 80 daemon
    2. adduser -o --home /daemon --shell /sbin/nologin --uid 80 --gid 80 -c "Web Server" daemon

    注意 /sbin/nologin , 意味着该用户不能登录,同时我也没有给它指定密码,这个用户只能用于启动tomcat

    1. chown daemon:daemon -R /srv/*
    2. su - daemon -c "/srv/apache-tomcat/bin/startup.sh"

    接下来解决80端口问题, 思路就是80去调用8080,或者映射端口。

    下面是影射方案,80 跳转 8080

    1. iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
    2. 取消跳转
    3. iptables -t nat -D PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
    4. 查看规则
    5. iptables -t nat -L

    另一个就是从80请求去调用8080的方案

    这个方案可以在 Tomcat 前段增加反向代理,例如:Nginx,Apache,Squid,Varnish或者F5, Array这类设备等等

    8.3 应用程序安全

    关闭war自动部署 unpackWARs="false" autoDeploy="false"。防止被植入木马等恶意程序

    应用程序部署与tomcat启动,不能使用同一个用户。

    我的tomcat 安装在 /srv目录下,Tomcat启动用户为daemon; 应用程序放在/www目录下www所有者是www用户。这样的目的是一旦tomcat被植入web shell程序,它将不能创建或编辑/www目录下面的任何内容。

    adduser --home /www -c "Web Application" www

    8.4 JSESSIONID

    修改 Cookie 变量 JSESSIONID, 这个cookie 是用于维持Session关系。建议你改为PHPSESSID。





    **********  第三部分 延伸阅读 catalin.sh脚本分析   ***********


    1、解释startup.sh 和 catalin.sh 的区别

    Linux下Tomcat启动后显示控制台:

    采用 ./startup.sh 启动,则没有显示控制台。

    要像windows一样显示控制台,则 : ./catalina.sh run


    2、(转载)tomcat学习笔记之catalina.sh

    原文链接:http://blog.csdn.net/jackie_xiaonan/article/details/49229139

    本文基于tomcat 8.0.18版本的源码实现写作,随tomcat7发布的脚本可能会有些差异。
    最早是在07年部门培训的时候接触到tomcat,但后来的工作都和web开发不相关,所以没有积累多少使用经验,只有一点肤浅的感性认识;12年中项目组启动了新部件的开发,使用tomcat做为运行平台,但和我的工作内容不相关,所以还没有实质性的接触;15年初,调离原项目,加入新产品的研发,而新产品是基于tomcat的j2ee项目,工作这么多年终于有机会和tomcat做一次亲密接触。

    与catalina.sh相关的脚本

    tomcat发布版本中附带了很多脚本,和catalina.sh相关有如下

    • version.sh,查看当前tomcat的版本号。
    • startup.sh,启动运行tomcat实例。
    • shutdown.sh,停止tomcat实例的运行。
    • configtest.sh,校验tomcat配置文件server.xml的格式、内容等是否合法、正确。
    • setclasspath.sh,catalina.sh依赖这个脚本来设置一些运行时变量。

    脚本version.sh、startup.sh、shutdown.sh、configtest.sh都是对catalina.sh的包装,内容大同小异,差异在于功能介绍和调用catalina.sh时的参数不同。
    下面就重点分析下catalina.sh的实现。

    catalina.sh的命令行选项

    在shell下不带任何参数来执行catalina.sh,可以看到类似如下的输出信息。

    Usage: catalina ( commands ... )
    commands:

       debug                      Start Catalina in a debugger

      debug -security   Debug Catalina with a security manager

      jpda start        Start Catalina under JPDA debugger

      run               Start Catalina in the current window

      run -security     Start in the current window with security manager

      start             Start Catalina in a separate window

      start -security   Start in a separate window with security manager

      stop              Stop Catalina, waiting up to 5 seconds for the process to end

      stop n            Stop Catalina, waiting up to n seconds for the process to end

      stop -force       Stop Catalina, wait up to 5 seconds and then use kill -KILL if still running

      stop n -force     Stop Catalina, wait up to n seconds and then use kill -KILL if still running

      configtest        Run a basic syntax check on server.xml - check exit code for result

      version           What version of tomcat are you running?



    帮助信息给出了各选项的意义,但tomcat提供的封装脚本中只用到了其中的一部分,比如:

    • version,在version.sh中使用。
    • start,在startup.sh中使用。
    • stop,在shutdown.sh中使用。
    • configtest,在configtest.sh中使用。

    如果需要使用其它命令行选项,最简单的方法即是复制startup.sh脚本并重命名为新的脚本,使用文本编辑器调整传给catalina.sh的参数,如此操作之后,满足自定义需求的脚本即创建好了。

    catalina.sh中使用的变量

    catalina.sh提供了哪些变量?

    用文本编辑器打开catalina.sh,首先可以看到一些环境变量的说明,基于功能可以做如下分类:

    • 指定tomcat和应用的启动路径
      • CATALINA_HOME,指向tomcat的安装路径,或者脚本catalina.sh所在位置的父目录。
      • CATALINA_BASE,可选项,如无定义,则与CATALINA_HOME取值相同。用于指向用户自定义的tomcat路径,tomcat启动时将以CATALINA_BASE变量值来计算配置文件、日志文件等的路径。
    • Java运行时路径,tomcat运行依赖系统已安装好的Java运行时软件,因此如下两个变量中至少定义一个,并且变量值指向合法路径。
      • JAVA_HOME,指定JDK的安装路径。
      • JRE_HOME,指定JRE的安装路径。取值原则,如用户未指定JRE_HOME,则取JAVA_HOME的值;如JRE_HOME和JAVA_HOME都有定义,则优先取JRE_HOME的定义。
    • Java运行时参数
      • JAVA_OPTS,顾名思义,用来定义传递Java运行时的参数,对全部命令行选项都会生效,因此不建议在本变量中定义堆大小、GC参数、JMX参数等。
      • CATALINA_OPTS,用来定义传递给Java运行时的参数,仅在命令行选项为run/start/debug时有效,可以用来传递堆大小、GC参数、JMX参数等
      • CATALINA_TMPDIR,用来定义java.io.tmpdir变量的值,默认值为$CATALINA_BASE/temp。
      • JAVA_ENDORSED_DIRS,以分号相隔的目录列表,用来替换非JCP提供的jar实现,默认值为$CATALINA_HOME/endorsed。
    • 远程调试参数。当开发环境与应用运行环境不一致,或者开发环境下出于各种原因不适合调试应用时,这时即可借助远程调试来解决问题。JPDA的介绍可参考阅读资料。
      • JPDA_TRANSPORT,默认值dt_socket。
      • JPDA_ADDRESS,默认值localhost:8000。
      • JPDA_SUSPEND,默认值n
      • JPDA_OPTS,默认值为-agentlib:jdwp=transport=$JPDA_TRANSPORT,address=$JPDA_ADDRESS,server=y,suspend=$JPDA_SUSPEND
    • 其它
      • CATALINA_OUT,使用全路径方式指定stdout和stderr重定向之后的文件名,默认值为$CATALINA_BASE/logs/catalina.out。
      • CATALINA_PID,本选项在*nix下有效,指定pid文件的存储路径,默认值为空,如用户指定,则启动、停止时都会从变量指定的文件中提取进程ID。
      • LOGGING_CONFIG,定义tomcat使用的日志配置文件的路径,默认值为$CATALINA_BASE/conf/logging.properties。
      • LOGGING_MANAGER,定义tomcat使用的日志管理器。

    看过变量的定义之后,是否有定制变量取值的冲动了?

    如何定义catalina.sh提供的变量?

    • 方法一,修改catalina.sh,在脚本的开始位置为前述变量赋值。
    • 方法二,提供自定义的启动、停止脚本,在自定义的脚本中为前述变量赋值。
    • 方法三,使用tomcat开发人员预留的扩展方法,在$CATALINA_BASE/bin/setenv.sh中为前述变量赋值。

    个人推荐方法二,升级tomcat版本时非常简单,不需要从原tomcat安装路径下复制文件到升级后的tomcat的安装路径下。

    catalina.sh的实现

    catalina.sh规格接近600行代码,这足以吓退很多人,但如果肯硬着头皮看几遍的话,其实可以了解到catalina.sh的代码并不复杂,可读性还是很高的。
    除去catalina.sh中对cygwin、os400的特殊处理,代码做了如下操作:

    • 加载类路径,通过加载、执行setclasspath.sh实现。
    • 加载用户自定义变量,通过加载setenv.sh实现。
    • 校验变量,包括前述介绍的变量,检查是否存在定义,如无定义则使用默认值,并依据用途做相应的校验。
    • 运行命令,依据脚本接收到的选项,将变量拼接为命令,并执行。

    阅读材料

    • JPDA是Java Platform Debugger Architecture的简写,详尽的阅读材料可参考http://docs.oracle.com/javase/8/docs/technotes/guides/jpda。

    欢迎访问Jackie的家,http://jackieathome.sinaapp.com/,如需转载文章,请注明出处。



    3、tomcat启动脚本startup.sh分析

      原文地址:http://vekergu.blog.51cto.com/9966832/1621396

    一、分析说明

    为了写出更加完善的tomcat启动方面的自动化脚本,健壮自己用于代码上线自动化部署的脚本,特分析下tomcat的bin目录下的starup.sh脚本,学习标准的sh脚本的编写方法,从中吸取经验

    二、脚本分析

    #!/bin/sh
    # Licensed to the Apache Software Foundation (ASF) under one or more
    # contributor license agreements.  See the NOTICE file distributed with
    # this work for additional information regarding copyright ownership.
    # The ASF licenses this file to You under the Apache License, Version 2.0
    # (the "License"); you may not use this file except in compliance with
    # the License.  You may obtain a copy of the License at
    #
    #     http://www.apache.org/licenses/LICENSE-2.0
    #
    # Unless required by applicable law or agreed to in writing, software
    # distributed under the License is distributed on an "AS IS" BASIS,
    # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    # See the License for the specific language governing permissions and
    # limitations under the License.
    # -----------------------------------------------------------------------------
    # Start Script for the CATALINA Server
    #
    # $Id: startup.sh 1130937 2011-06-03 08:27:13Z markt $
    # -----------------------------------------------------------------------------
    # Better OS/400 detection: see Bugzilla 31132
    os400=false
    darwin=false
    #os400是 IBM的AIX
    #darwin是MacOSX 操作环境的操作系统成份
    #Darwin是windows平台上运行的类UNIX模拟环境
    case "`uname`" in
    CYGWIN*) cygwin=true;;
    OS400*) os400=true;;
    Darwin*) darwin=true;;
    esac
    #上一个判断是为了判断操作系统,至于何用,往下看
    # resolve links - $0 may be a softlink
    #读取脚本名
    PRG="$0"
    #test �h File 文件存在并且是一个符号链接(同-L)
    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
    #上面循环语句的意思是保证文件路径不是一个连接,使用循环直至找到文件原地址
    #遇到一时看不明白的shell,可以拆解后自己在linux反复运行验证,一点点拆解就会明白的
    #link=`expr "$ls" : '.*-> (.*)$'` 模拟后: expr 'lrwxrwxrwx 1 root root 19 3月  17 10:12 ./bbb.sh -> /root/shell/test.sh' : '.*-> (.*)$'
    #很明确的发现是用expr来提取/root/shell/test.sh的内容
    #而这个循环就可以明确其目的,排除命令为链接,找出命令真正的目录,防止后面的命令出错 
    #这段代码如果在以后有这方面的找出链接源头的需求可以完全借鉴
    

    #获取这个脚本的目录
    PRGDIR=dirname <span class="string" style="color:#dd1144;">"<span class="variable">$PRG</span>"</span>
    EXECUTABLE=catalina.sh
    # Check that target executable exists
    #这些判断是否气是其他的操作系统
    if $os400; then
    # -x will Only work on the os400 if the files are:
    # 1. owned by the user
    # 2. owned by the PRIMARY group of the user
    # this will not work if the user belongs in secondary groups
    eval
    #这个eval还没有理解
    else
    if [ ! -x "$PRGDIR"/"$EXECUTABLE" ]; then
    #判断脚本catalina.sh是否存在并有可执行权限,没有执行权限就退出
    echo "Cannot find $PRGDIR/$EXECUTABLE"
    echo "The file is absent or does not have execute permission"
    echo "This file is needed to run this program"
    exit 1
    fi
    fi
    exec "$PRGDIR"/"$EXECUTABLE" start "$@"
    #exec命令在执行时会把当前的shell process关闭,然后换到后面的命令继续执行。
    #exec命令可以很好的进行脚本之间过渡,并且结束掉前一个脚本这样不会对后面执行的脚本造成干扰。
    #exec 命令:常用来替代当前 shell 并重新启动一个 shell,换句话说,并没有启动子 shell。使用这一命令时任何现
    #有环境都将会被清除。exec 在对文件描述符进行操作的时候,也只有在这时,exec 不会覆盖你当前的 shell 环境。
    #exec 可以用于脚本执行完启动需要启动另一个脚本是使用,但须考虑到环境变量是否被继承。

    三、总结

         tomcat的startup.sh脚本主要用来判断环境,找到catalina.sh脚本源路径,将启动命令参数传递给catalina.sh执行。然而catalina.sh脚本中也涉及到判断系统环境和找到catalina.sh脚本原路径的相关代码,所以执行tomcat启动时,无需使用startup.sh脚本(下一篇分析的shutdown.sh也类似),直接./catalina.sh start|stop|restart 即可。

    http://vekergu.blog.51cto.com/9966832/d-2
  • 相关阅读:
    入职linux基本命令学习
    C++大师Stan Lippman:我对中国程序员的忠告
    Create Your Own Search Engine with Python
    获取相加等于某个值的集合
    关于mysql的连接数问题
    修改Windows2003Server的Telnet默认端口(23)为其它端口的方法
    解决WCF传输大数据量时出错并提示:远程主机强迫关闭了一个现有的连接
    IIS服务器静态网页被挂马和解决方法(ZT)
    CAD2016 Object Arx开发环境搭建与HelloWorld实现
    我的Java之路(5)
  • 原文地址:https://www.cnblogs.com/jpfss/p/9367355.html
Copyright © 2020-2023  润新知