tomcat作为运行平台,连接到服务器后,通常通过以下几种方式启动关闭tomcat服务;
1.切换到tomcat下的bin目录;
2.启动tomcat服务
(1)直接启动./startup.bat
(2)作为服务启动nohup ./startup.sh &
(3)控制台动态输出方式启动./catalina.sh run动态地显示tomcat后台的控制台输出信息,Ctrl+C后退出并关闭服务。
分析:
通过方式一盒方式三启动的tomcat有个弊端,当客户端连接断开的时候,tomcat服务也会立即停止,通过方式二可以作为Linux服务一直运行。
通过方式一盒方式二启动的tomcat,其日志会写到相应的日志文件中,而不能动态地查看tomcat控制台的输出信息与错误情况,通过方式三可以控制台模式启动tomcat服务,直接看到程序运行后台的控制台信息,不必每次都要很麻烦地打开caalina.out日志文件进行查看,这样便于跟踪查阅后台输出信息。tomcat控制台信息包括log4j和System.out.println()等输出的信息。
3.关闭tomcat服务
./shutdown.sh
调试模式的命令是catalina.sh debug脚本catalina.sh用于启动和关闭tomcat服务器,是最关键的脚本。另外的start.sh和shutdown.sh都是使用不同的参数调用了catalina.sh脚本。catalina.sh脚本的使用方法:echo "Usage: catalina.sh ( commands ... )" echo "commands:" echo " debug Start Catalina in a debugger" echo " debug -security Debug Catalina with a security manager" echo " embedded Start Catalina in embedded mode" echo " jpda start Start Catalina under JPDA debugger" echo " run Start Catalina in the current window" echo " run -security Start in the current window with security manager" echo " start Start Catalina in a separate window" echo " start -security Start in a separate window with security manager" echo " stop Stop Catalina"详细分析见http://www.51testing.com/html/94/488194-845179.html只不过catalina.sh里面有很多其他的东西,比如设置CLASSPATH,加载一些包。而start.sh几乎没做什么,就判断了一下JDK的路径,和一下配置而已,shutdown.sh和start.sh一样只做了写路径的判断PRGDIR=`dirname "$PRG"` EXECUTABLE=catalina.sh 【总结】 Linux环境下的批处理文件扩展名是sh,Windows环境下的批处理文件扩展名是bat。 一般在Linux下,用startup.sh shutdown.sh 在Windows下,用startup.bat shutdown.bat 以下内容摘录,详情转 http://www.tuicool.com/articles/fuAnEn3
与catalina.sh相关的脚本
tomcat发布版本中附带了很多脚本,和catalina.sh相关有如下
- version.sh,查看当前tomcat的版本号。
- startup.sh,启动运行tomcat实例。
- shutdown.sh,停止tomcat实例的运行。
- configtest.sh,校验tomcat配置文件server.xml的格式、内容等是否合法、正确。
- setclasspath.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
configtest Run a basic syntax check on server.xml
version What version of tomcat are you running?
帮助信息给出了各选项的意义,但tomcat提供的封装脚本中只用到了其中的一部分,比如:
- version,在version.sh中使用。
- start,在startup.sh中使用。
- stop,在shutdown.sh中使用。
- configtest,在configtest.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中为前述变量赋值。
catalina.sh的实现
catalina.sh规格接近600行代码,这足以吓退很多人,但如果肯硬着头皮看几遍的话,其实可以了解到catalina.sh的代码并不复杂,可读性还是很高的。除去catalina.sh中对cygwin、os400的特殊处理,代码做了如下操作:
- 加载类路径,通过加载、执行setclasspath.sh实现。
- 加载用户自定义变量,通过加载setenv.sh实现。
- 校验变量,包括前述介绍的变量,检查是否存在定义,如无定义则使用默认值,并依据用途做相应的校验。
- 运行命令,依据脚本接收到的选项,将变量拼接为命令,并执行。