1 Overview
Script Catalina.sh is used to launch and close Tomcat servers. It is the most critical script. Additional scripts Startup.sh and shutdown.sh are all calling the script using different parameters This script is as follows (from this script itself) :
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"
2 - scripting analysis
#! / bin / sh
# ===================================================== ============
# This script sets the correct environment variable and system information, then start or stop Tomcat Server
# The specific operation is:
# Use the command line parameter as the args of Args, call org.apache.catalina.startup.bootstrap.main (String [])
# ===================================================== =============
# ------------------------------------------------- ----------------------------
# Start / stop Script for the catalina server #
# Environment Variable Prequisites
#
# Catalina_Home May Point at your Catalina "Build" Directory.
#
# Catalina_Base (optional) Base Directory for Resolving Dynamic Portions
# of a catalina installation. if not present, resolves to
# The Same Directory That Catalina_Home Points T.
#
# Catalina_opts (optional) Java Runtime Options Used when "Start",
# "stop", or "run" Command is Executed.
#
# Catalina_TMPDir (Optional) Directory Path location of Temporary DIRECTORY
# The JVM Should Use (java.io.tmpdir). Defaults to
# $ Catalina_base / temp.
#
# Java_Home Must Point At Your Java Development Kit Installation.
#
# Java_opts (optional) Java Runtime Options Used when "start",
# "stop", or "run" Command is Executed.
#
# JPDA_TRANSPORT (OPTIONAL) JPDA TRANSPORT USED WHEN THE "JPDA START"
# Command is executed. The default is "dt_socket".
#
# JPDA_ADDRESS (OPTIONAL) Java Runtime Options Used when "JPDA START"
# Command IS EXECUTED. The default is 8000.
#
# Jsse_home (optional) May Point At Your Java Secure Sockets Extension
# (Jsse) Installation, Whose Jar Files Will Be Added to the THE
# System class path used to start tomcat.
#
# Catalina_pid (optional) Path of the file Which should Contains the PID
# of catalina Startup Java Process, When Start (fork) IS Used
# ------------------------------------------------- ---------------------------- # os specific support. $ Var _must_ be set to each of the estuary.
Cygwin = false
Case "` uname` "in
Cygwin *) cygwin = true ;;
ESAC
# PRG is the name of the script being executed, which can be considered PRG == "Catalina.sh", or a symbolic chain, pointing to this script.
PRG = "$ 0"
# Handling the PRG, etc. After the cycle is jumped out, the PRG becomes ????
While [-h "$ prop"]; do
Ls = `ls -ld" $ prag "`
Link = `EXPR" $ ls ": '. * -> /(.*/) $'`
If EXPR "$ link": '. * /. *'> / dev / null; then
PRG = "$ link"
Else
PRG = `Dirname" $ PRG "` / "$ limited"
Fi
DONE
# Prgdir is the directory path name of the PRG
Prgdir = `Dirname" $ prag "`
# Execute $ CATALINA_HOME / BIN / STENV.SH to set the environment variable
# [-r filename] is to determine if the file exists and readable
Catalina_home = `CD" $ prgdir / .. "; pwd`
IF [-r "$ CATALINA_HOME" /bin/setenv.sh]; then
"$ CATALINA_HOME" /bin/setenv.sh
Fi
# For cygwin, make sure all pathnames are in accordance with UNIX format
IF $ cygwin; then
[-n "$ java_home"] && java_home = `Cygpath --unix" $ java_home "`
[-n "$ catalina_home"] && catalina_home = `Cygpath --unix" $ catalina_home "`
[-n "$ catalina_base"] && catalina_base = `Cygpath --unix" $ catalina_base "`
[-n "$ classpath"] && classpath = `Cygpath --Path --unix" $ classpath "`
[-n "$ jsse_home"] && jsse_home = `cygpath --path --unix" $ jsse_home "`
Fi
# Set the classpath variable used to initialize SystemClassLoader: Complete by executing script setClassPath.sh
# Note: Script setClassPath.sh changed the original $ ClassPath variable, and set it to:
# ClassPath = $ catalina_home / bin / bootstrap.jar: $ java_home / lib / Tools.jar # where bootstrap.jar is package document,
# Contains the startup method org.apache.catalina.startup.bootstrap.main (String [] args
# Tools.jar contains a Javac compiler to compile JSP files into servlet class.
IF [-r "$ CATALINA_HOME" /bin/setclasspath.sh]; then
Basedir = "$ CATALINA_HOME"
"$ CATALINA_HOME" /bin/setclasspath.sh
Else
Echo "Cannot Find $ Catalina_Home / Bin / SetClassPath.sh"
Echo "this file is neededed to run this program"
EXIT 1
Fi
# 补 some JAR files after the ClassPath environment variable
# [-n string] Judging whether the string is not 0; [-z string] Judging whether the string is 0
# They can be used to determine if an environment variable has been set
IF [-n "$ jsse_home"]; then
ClassPath = "$ ClassPath": "$ jsse_home" /lib/jcert.jar: "$ jsse_home" /lib/jnet.jar: "$ jsse_home" /lib/jsse.jar
Fi
Classpath = "$ ClassPath": "$ catalina_home" /bin/bootstrap.jar
# Specify Catalina_Base variables
# If catalina_base doesn't have a value, let Catalina_Base = $ CATALINA_HOME
IF [-z "$ CATALINA_BASE"]; then
Catalina_base = "$ CATALINA_HOME"
Fi
# Specify Catalina_TMPDIR variables
# If Catalina_TMPDIR does not value, let Catalina_TMPDIR = $ CATALINA_BASE / TEMP
IF [-z "$ Catalina_TMPDir"]; then
# Define the java.io.tmpdir to use for catalina
Catalina_tmpdir = "$ catalina_base" / TEMP
Fi
# For cygwin, convert the path name into a Windows format before executing the Java program
IF $ cygwin; then
Java_Home = `Cygpath --Path - Windows" $ java_home "`
Catalina_home = `Cygpath --Path - Windows" $ CATALINA_HOME "`
Catalina_base = `cygpath --Path - Windows" $ CATALINA_BASE "`
Catalina_tmpdir = `Cygpath --Path - Windows" $ catalina_tmpdir "`
ClassPath = `Cygpath --Path - Windows" $ ClassPath "` jsse_home = `cygpath --Path - Windows" $ jsse_home "`
Fi
# Display information, then execute the command
Echo "Using Catalina_Base: $ CATALINA_BASE"
Echo "Using Catalina_Home: $ CATALINA_HOME"
Echo "Using Catalina_TMPDir: $ Catalina_TMPDIR"
Echo "Using Java_Home: $ java_home"
# ...... When performing Catalina.sh, it is JPDA ...
IF [$ 1 "=" jpda "]; then
IF [-z "$ JPDA_TRANSPORT"]; then
JPDA_TRANSPORT = "dt_socket"
Fi
IF [-z "$ jpda_address"]; then
JPDA_ADDRESS = "8000"
Fi
IF [-z "$ JPDA_OPTS"]; then
JPDA_OPTS = "- XDebug -xrunjdwp: Transport = $ JPDA_TRANSPORT, Address = $ JPDA_ADDRESS, Server = Y, SUSPEND = N"
Fi
Catalina_opts = "$ CATALINA_OPTS $ JPDA_OPTS"
Shift
Fi
# ...... When performing Catalina.sh, it is debug ...
IF [$ 1 "=" debug "]; then
Shift
IF [$ 1 "=" -security "]; then
Echo "Using Security Manager"
Shift
Exec "$ _RunJDB" $ java_opts $ CATALINA_OPTS /
-Djava.endorsed.dirs = "$ java_endorsed_dirs" -classpath "$ classpath" /
-SourcePath "$ CATALINA_HOME" /../../ jakarta-tomcat-4.0 / catalina / src / share /
-Djava.security.manager /
-Djava.security.policy == "$ CATALINA_BASE" /CONF/CATALINA.POLICY /
-Dcatalina.base = "$ CATALINA_BASE" /
-Dcatalina.home = "$ CATALINA_HOME" /
-Djava.io.tmpdir = "$ CATALINA_TMPDIR" /
Org.apache.catalina.Startup.bootstrap "$ @" start
Else
Exec "$ _RunJDB" $ java_opts $ CATALINA_OPTS /
-Djava.endorsed.dirs = "$ java_endorsed_dirs" -classpath "$ ClassPath" / -SourcePath "$ CATALINA_HOME" /../../ jakarta-tomcat-4.0 / catalina / src / share /
-Dcatalina.base = "$ CATALINA_BASE" /
-Dcatalina.home = "$ CATALINA_HOME" /
-Djava.io.tmpdir = "$ CATALINA_TMPDIR" /
Org.apache.catalina.Startup.bootstrap "$ @" start
Fi
# ...... When performing Catalina.sh, it is Embedded ...
Elif ["$ 1" = "Embedded"];.
Shift
Echo "Embedded ClassPath: $ Classpath"
Exec "$ _Runjava" $ java_opts $ CATALINA_OPTS /
-Djava.endorsed.dirs = "$ java_endorsed_dirs" -classpath "$ classpath" /
-Dcatalina.base = "$ CATALINA_BASE" /
-Dcatalina.home = "$ CATALINA_HOME" /
-Djava.io.tmpdir = "$ CATALINA_TMPDIR" /
Org.apache.catalina.Startup.Embedded "$ @"
# -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----
# | ...... When the parameter of the Catalina.sh is Run ... |
# | Start Tomcat Server in the current window! ! ! |
# -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----
Elif ["$ 1" = "run"]; then
# 把 去 r掉
Shift
# If the parameter is Run -security, start the Security Manager
IF [$ 1 "=" -security "]; then
Echo "Using Security Manager"
Shift
Exec "$ _Runjava" $ java_opts $ CATALINA_OPTS /
-Djava.endorsed.dirs = "$ java_endorsed_dirs" -classpath "$ classpath" /
-Djava.security.manager /
-Djava.security.policy == "$ CATALINA_BASE" /CONF/CATALINA.POLICY /
-Dcatalina.base = "$ CATALINA_BASE" /
-Dcatalina.home = "$ CATALINA_HOME" /
-Djava.io.tmpdir = "$ CATALINA_TMPDIR" /
Org.apache.catalina.startup.bootstrap "$ @" Start # If the parameter is a lonely RUN, start the Tomcat server in this window
# In this window, the method started in this window is to use EXEC, let the current process fork a new process to start Tomcat, the current process is the parent process of Tomcat
# 启 启 Tomcat class is org.apache.catalina.startup.bootstrap.main ("start");
Else
Exec "$ _Runjava" $ java_opts $ CATALINA_OPTS /
-Djava.endorsed.dirs = "$ java_endorsed_dirs" -classpath "$ classpath" /
-Dcatalina.base = "$ CATALINA_BASE" /
-Dcatalina.home = "$ CATALINA_HOME" /
-Djava.io.tmpdir = "$ CATALINA_TMPDIR" /
Org.apache.catalina.Startup.bootstrap "$ @" start
Fi
# -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----
# | ...... When performing the parameters of Catalina.sh, it is START ... |
# | Start Tomcat Server in a new window! ! ! |
# -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----
Elif ["$ 1" = "start"]; then
# Remove the parameter start
Shift
# Create a file (if the file does not exist) $ Catalina_Base / Logs / Catalina.out
Touch "$ Catalina_Base" /logs/catalina.out
# If the parameter is start -security, start the Security Manager
IF [$ 1 "=" -security "]; then
Echo "Using Security Manager"
Shift
"$ _Runjava" $ java_opts $ CATALINA_OPTS /
-Djava.endorsed.dirs = "$ java_endorsed_dirs" -classpath "$ classpath" /
-Djava.security.manager /
-Djava.security.policy == "$ CATALINA_BASE" /CONF/CATALINA.POLICY /
-Dcatalina.base = "$ CATALINA_BASE" /
-Dcatalina.home = "$ CATALINA_HOME" /
-Djava.io.tmpdir = "$ CATALINA_TMPDIR" /
Org.apache.catalina.startup.bootstrap "$ @" start /
>> "$ CATALINA_BASE" /LOGS/CATALINA.OUT 2> & 1 &
IF [! -z "$ CATALINA_PID"]; Thenecho $!> $ CATALINA_PID
Fi
# If the parameter is a START, then start Tomcat in a new window
Else
"$ _Runjava" $ java_opts $ CATALINA_OPTS /
-Djava.endorsed.dirs = "$ java_endorsed_dirs" -classpath "$ classpath" /
-Dcatalina.base = "$ CATALINA_BASE" /
-Dcatalina.home = "$ CATALINA_HOME" /
-Djava.io.tmpdir = "$ CATALINA_TMPDIR" /
Org.apache.catalina.startup.bootstrap "$ @" start /
>> "$ CATALINA_BASE" /LOGS/CATALINA.OUT 2> & 1 &
IF [! -z "$ Catalina_PID"]; then
Echo $!> $ CATALINA_PID
Fi
Fi
# -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----
# | ...... When performing the parameters of Catalina.sh, it is STOP ... |
# | Close Tomcat server! ! ! |
# -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----
Elif ["$ 1" = "stop"]; then
# Remove the parameter stop
Shift
# Close the class of the Tomcat server is org.apache.catalina.startup.bootstrap-> main ("stop");
# Note: Java -d is setting system properties
Exec "$ _Runjava" $ java_opts $ CATALINA_OPTS /
-Djava.endorsed.dirs = "$ java_endorsed_dirs" -classpath "$ classpath" /
-Dcatalina.base = "$ CATALINA_BASE" /
-Dcatalina.home = "$ CATALINA_HOME" /
-Djava.io.tmpdir = "$ CATALINA_TMPDIR" /
Org.apache.catalina.startup.bootstrap "$ @" stop
# -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----
# | ...... When performing the parameters of Catalina.sh, it is unrecognizable ... |
# | Print Help Information, thereby viewing the meaning of various parameters representing! ! ! |
# -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----
Else
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"
EXIT 1
Fi