【问题标题】:Facing some issues regarding tomcat startup and shutdown on ubuntu 10.04在 ubuntu 10.04 上面临一些关于 tomcat 启动和关闭的问题
【发布时间】:2011-12-14 23:13:33
【问题描述】:

我遇到了一些关于 tomcat 启动和关闭的问题。

我正在使用

  1. Tomcat v.6.0.32(使用从 Apache 网站下载的解压缩包,而不是 Ubuntu 10.04 分发的包)
  2. Ubuntu v.10.04

我使用命令启动tomcat:

$./catalina.sh jpda start

然后我尝试使用命令停止它:

$./catalina.sh stop

并收到以下消息:

SEVERE: Catalina.stop: 
java.net.ConnectException: Connection refused
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351)
    at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
    at java.net.Socket.connect(Socket.java:529)
    at java.net.Socket.connect(Socket.java:478)
    at java.net.Socket.<init>(Socket.java:375)
    at java.net.Socket.<init>(Socket.java:189)
    at org.apache.catalina.startup.Catalina.stopServer(Catalina.java:422)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.apache.catalina.startup.Bootstrap.stopServer(Bootstrap.java:338)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:416)

我也尝试使用命令停止它:

$./catalina.sh stop -force

但我收到了消息:

Kill failed: $CATALINA_PID not set

然后我再次尝试使用命令启动tomcat:

$./catalina.sh jpda start

在 /logs 文件夹中仅生成 catalina.out 并显示以下错误消息:

ERROR: transport error 202: bind failed: Address already in use
ERROR: JDWP Transport dt_socket failed to initialize, TRANSPORT_INIT(510)
JDWP exit error AGENT_ERROR_TRANSPORT_INIT(197): No transports initialized [../../../src/share/back/debugInit.c:690]
FATAL ERROR in native method: JDWP No transports initialized, jvmtiError=AGENT_ERROR_TRANSPORT_INIT(197)

正如错误“地址已在使用”中所示,我确认没有其他应用程序配置为在端口 8080 上运行。 每次我杀死进程 ID 并重新启动它时,启动工作正常。这需要我在需要停止 tomcat 服务器时使用“KILL”命令手动杀死进程。 我在其他设置了与上述相同环境的机器上也遇到了同样的行为。

谁能告诉我是什么原因造成的以及如何解决这个问题?

谢谢,
吉格尼什

【问题讨论】:

  • 这不只是因为启动和关闭脚本共享相同的 catalina.sh jvm 属性,并且该端口已被启动脚本使用吗?

标签: tomcat6 ubuntu-10.04 shutdown


【解决方案1】:

以下命令可以解决问题:

service tomcat8 stop

这些也会有帮助:

service tomcat8 start
service tomcat8 restart

【讨论】:

    【解决方案2】:

    我认为官方推荐的方式(根据catalina.sh inline cmets)是:

    • 在 $CATALINA_HOME/bin 下创建一个 setenv.sh 文件:

    #!/bin/sh

    CATALINA_PID="$CATALINA_HOME/logs/catalina.pid";导出 CATALINA_PID

    • chmod 作为可执行文件:

      chmod u+x setenv.sh

    • 通过以下方式创建 pid 文件:

      触摸 $CATALINA_HOME/logs/catalina.pid

    • 然后像往常一样启动tomcat,pid文件会自动更新。你也可以通过“-force”选项停止tomcat。

    【讨论】:

      【解决方案3】:

      不要使用 /etc/bash.bashrc 把它放在你的 catalina.sh 上

      之后:

      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
      

      这样写:

      export CATALINA_PID="$CATALINA_HOME/catalina_pid.txt"
      

      现在当你使用 catalina.sh stop -force 时你的 tomcat 会被杀死

      【讨论】:

        【解决方案4】:

        修复了tomcat关闭问题。在这里发布解决方案以供参考。

        执行以下操作以在您的机器上修复它:

        1) Replace $CATALINA_HOME/bin/catalina.sh with catalina.sh shown below.
        2) Open /etc/bash.bashrc for edit
        3) Add following into it, (AFTER export CATALINA_HOME)
                  export CATALINA_PID="$CATALINA_HOME/catalina_pid.txt",
        
                  where $CATALINA_HOME is the tomcat home path
        
         4) Execute following :
              $ source /etc/bash.bashrc
        
         5) Start tomcat: $CATALINA_HOME/bin/catalina.sh start (or catalina.sh jpda start)
        
         6) Shutdown tomcat using following command only for proper shutdown:
                $CATALINA_HOME/bin/catalina.sh stop -force
        

        catalina.sh - 包含我的内联 cmets

                #!/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/Stop Script for the CATALINA Server
                #
                # Environment Variable Prerequisites
                #
                #   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 to.
                #
                #   CATALINA_OUT    (Optional) Full path to a file where stdout and stderr
                #                   will be redirected.
                #                   Default is $CATALINA_BASE/logs/catalina.out
                #
                #   CATALINA_OPTS   (Optional) Java runtime options used when the "start",
                #                   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.
                #                   Required to run the with the "debug" argument.
                #
                #   JRE_HOME        Must point at your Java Development Kit installation.
                #                   Defaults to JAVA_HOME if empty.
                #
                #   JAVA_OPTS       (Optional) Java runtime options used when the "start",
                #                   "stop", or "run" command is executed.
                #
                #   JAVA_ENDORSED_DIRS (Optional) Lists of of colon separated directories
                #                   containing some jars in order to allow replacement of APIs
                #                   created outside of the JCP (i.e. DOM and SAX from W3C).
                #                   It can also be used to update the XML parser implementation.
                #                   Defaults to $CATALINA_HOME/endorsed.
                #
                #   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 the "jpda start"
                #                   command is executed. The default is 8000.
                #
                #   JPDA_SUSPEND    (Optional) Java runtime options used when the "jpda start"
                #                   command is executed. Specifies whether JVM should suspend
                #                   execution immediately after startup. Default is "n".
                #
                #   JPDA_OPTS       (Optional) Java runtime options used when the "jpda start"
                #                   command is executed. If used, JPDA_TRANSPORT, JPDA_ADDRESS,
                #                   and JPDA_SUSPEND are ignored. Thus, all required jpda
                #                   options MUST be specified. The default is:
                #
                #                   -agentlib:jdwp=transport=$JPDA_TRANSPORT,
                #                       address=$JPDA_ADDRESS,server=y,suspend=$JPDA_SUSPEND
                #
                #   CATALINA_PID    (Optional) Path of the file which should contains the pid
                #                   of catalina startup java process, when start (fork) is used
                #
                #   LOGGING_CONFIG  (Optional) Override Tomcat's logging config file
                #                   Example (all one line)
                #                   LOGGING_CONFIG="-Djava.util.logging.config.file=$CATALINA_BASE/conf/logging.properties"
                #
                #   LOGGING_MANAGER (Optional) Override Tomcat's logging manager
                #                   Example (all one line)
                #                   LOGGING_MANAGER="-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager"
                #
                # $Id: catalina.sh 1040547 2010-11-30 14:47:49Z markt $
                # -----------------------------------------------------------------------------
        
                # OS specific support.  $var _must_ be set to either true or false.
                cygwin=false
                os400=false
                darwin=false
                case "`uname`" in
                CYGWIN*) cygwin=true;;
                OS400*) os400=true;;
                Darwin*) darwin=true;;
                esac
        
                # resolve links - $0 may be a softlink
                PRG="$0"
        
                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`
        
                # Ensure that any user defined CLASSPATH variables are not used on startup,
                # but allow them to be specified in setenv.sh, in rare case when it is needed.
                CLASSPATH=
        
                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
        
                # For Cygwin, ensure paths are in UNIX format before anything is touched
                if $cygwin; then
                    [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
                    [ -n "$JRE_HOME" ] && JRE_HOME=`cygpath --unix "$JRE_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"`
                fi
        
                # For OS400
                if $os400; then
                    # Set job priority to standard for interactive (interactive - 6) by using
                    # the interactive priority - 6, the helper threads that respond to requests
                    # will be running at the same priority as interactive jobs.
                    COMMAND='chgjob job('$JOBNAME') runpty(6)'
                    system $COMMAND
        
                    # Enable multi threading
                    export QIBM_MULTI_THREADED=Y
                fi
        
                # Get standard Java environment variables
                if $os400; then
                    # -r 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
                    BASEDIR="$CATALINA_HOME"
                    . "$CATALINA_HOME"/bin/setclasspath.sh
                else
                    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 needed to run this program"
                        exit 1
                    fi
                fi
        
                if [ -z "$CATALINA_BASE" ] ; then
                    CATALINA_BASE="$CATALINA_HOME"
                fi
        
                # Add tomcat-juli.jar and bootstrap.jar to classpath
                # tomcat-juli.jar can be over-ridden per instance
                if [ ! -z "$CLASSPATH" ] ; then
                    CLASSPATH="$CLASSPATH":
                fi
                if [ "$CATALINA_BASE" != "$CATALINA_HOME" ] && [ -r "$CATALINA_BASE/bin/tomcat-juli.jar" ] ; then
                    CLASSPATH="$CLASSPATH""$CATALINA_BASE"/bin/tomcat-juli.jar:"$CATALINA_HOME"/bin/bootstrap.jar
                else
                    CLASSPATH="$CLASSPATH""$CATALINA_HOME"/bin/bootstrap.jar
                fi
        
                if [ -z "$CATALINA_OUT" ] ; then
                    CATALINA_OUT="$CATALINA_BASE"/logs/catalina.out
                fi
        
                if [ -z "$CATALINA_TMPDIR" ] ; then
                    # Define the java.io.tmpdir to use for Catalina
                    CATALINA_TMPDIR="$CATALINA_BASE"/temp
                fi
        
                # Bugzilla 37848: When no TTY is available, don't output to console
                have_tty=0
                if [ "`tty`" != "not a tty" ]; then
                        have_tty=1
                fi
        
                # For Cygwin, switch paths to Windows format before running java
                if $cygwin; then
                    JAVA_HOME=`cygpath --absolute --windows "$JAVA_HOME"`
                    JRE_HOME=`cygpath --absolute --windows "$JRE_HOME"`
                    CATALINA_HOME=`cygpath --absolute --windows "$CATALINA_HOME"`
                    CATALINA_BASE=`cygpath --absolute --windows "$CATALINA_BASE"`
                    CATALINA_TMPDIR=`cygpath --absolute --windows "$CATALINA_TMPDIR"`
                    CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
                    JAVA_ENDORSED_DIRS=`cygpath --path --windows "$JAVA_ENDORSED_DIRS"`
                fi
        
                # Set juli LogManager config file if it is present and an override has not been issued
                if [ -z "$LOGGING_CONFIG" ]; then
                    if [ -r "$CATALINA_BASE"/conf/logging.properties ]; then
                        LOGGING_CONFIG="-Djava.util.logging.config.file=$CATALINA_BASE/conf/logging.properties"
                    else
                        # Bugzilla 45585
                        LOGGING_CONFIG="-Dnop"
                    fi
                fi
        
                if [ -z "$LOGGING_MANAGER" ]; then
                    JAVA_OPTS="$JAVA_OPTS -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager"
                else
                    JAVA_OPTS="$JAVA_OPTS $LOGGING_MANAGER"
                fi
        
                # ----- Execute The Requested Command -----------------------------------------
        
                # Bugzilla 37848: only output this if we have a TTY
                if [ $have_tty -eq 1 ]; then
                    echo "Using CATALINA_BASE:   $CATALINA_BASE"
                    echo "Using CATALINA_HOME:   $CATALINA_HOME"
                    echo "Using CATALINA_TMPDIR: $CATALINA_TMPDIR"
                    if [ "$1" = "debug" ] ; then
                        echo "Using JAVA_HOME:       $JAVA_HOME"
                    else
                        echo "Using JRE_HOME:        $JRE_HOME"
                    fi
                    echo "Using CLASSPATH:       $CLASSPATH"
                    if [ ! -z "$CATALINA_PID" ]; then
                        # Added by Jignesh Gohel - Nov 08, 2011.
        
                        # There was an issue occuring when shutting down tomcat using 
                        # command ./catalina.sh stop
        
                        # Issue mentioned at : http://stackoverflow.com/questions/7890197/facing-some-issues-regarding-tomcat-startup-and-shutdown-on-ubuntu-10-04
        
                        # Tomcat was shutting down properly but the process started using 
                        # command ./catalina.sh start was not getting killed.
        
                        # To resolve this issue following steps taken :-
        
                        # 1) Exported an environment variable named CATALINA_PID which 
                        # should point to a file in which the tomcat process id would be 
                        # written.
        
                        # Note: Using the normal command to shutdown tomcat "./catalina.sh stop" 
                        # following message was logged "Tomcat did not stop in time. PID file 
                        # was not removed".Thus to shutdown the tomcat using following command
                        # "./catalina.sh stop -force" which forcefully kills the tomcat process
                        # and also removes the file pointed by environment variable 
                        # "$CATALINA_PID".Thus executing a "touch" command when starting up
                        # tomcat to automatically create the file.
        
                        touch "$CATALINA_PID"
                        echo "Using CATALINA_PID:    $CATALINA_PID"
                    fi
                fi
        
                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_SUSPEND" ]; then
                        JPDA_SUSPEND="n"
                    fi
                    if [ -z "$JPDA_OPTS" ]; then
                        JPDA_OPTS="-agentlib:jdwp=transport=$JPDA_TRANSPORT,address=$JPDA_ADDRESS,server=y,suspend=$JPDA_SUSPEND"
                    fi
                    CATALINA_OPTS="$CATALINA_OPTS $JPDA_OPTS"
                    shift
                fi
        
                if [ "$1" = "debug" ] ; then
                    if $os400; then
                        echo "Debug command not available on OS400"
                        exit 1
                    else
                        shift
                        if [ "$1" = "-security" ] ; then
                            if [ $have_tty -eq 1 ]; then
                                echo "Using Security Manager"
                            fi
                            shift
                            exec "$_RUNJDB" "$LOGGING_CONFIG" $JAVA_OPTS $CATALINA_OPTS \
                                -Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS" -classpath "$CLASSPATH" \
                                -sourcepath "$CATALINA_HOME"/../../java \
                                -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" "$LOGGING_CONFIG" $JAVA_OPTS $CATALINA_OPTS \
                                -Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS" -classpath "$CLASSPATH" \
                                -sourcepath "$CATALINA_HOME"/../../java \
                                -Dcatalina.base="$CATALINA_BASE" \
                                -Dcatalina.home="$CATALINA_HOME" \
                                -Djava.io.tmpdir="$CATALINA_TMPDIR" \
                                org.apache.catalina.startup.Bootstrap "$@" start
                        fi
                    fi
        
                elif [ "$1" = "run" ]; then
        
                    shift
                    if [ "$1" = "-security" ] ; then
                        if [ $have_tty -eq 1 ]; then
                            echo "Using Security Manager"
                        fi
                        shift
                        exec "$_RUNJAVA" "$LOGGING_CONFIG" $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
                    else
                        exec "$_RUNJAVA" "$LOGGING_CONFIG" $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
        
                elif [ "$1" = "start" ] ; then
        
                    if [ ! -z "$CATALINA_PID" ]; then
                        if [ -f "$CATALINA_PID" ]; then
                            if [ -s "$CATALINA_PID" ]; then
                                echo "Existing PID file found during start."
                                if [ -r "$CATALINA_PID" ]; then
                                    PID=`cat "$CATALINA_PID"`
                                    ps -p $PID >/dev/null 2>&1
                                    if [ $? -eq 0 ] ; then
                                        echo "Tomcat appears to still be running with PID $PID. Start aborted."
                                        exit 1
                                    else
                                        echo "Removing/clearing stale PID file."
                                        rm -f "$CATALINA_PID" >/dev/null 2>&1
                                        if [ $? != 0 ]; then
                                            if [ -w "$CATALINA_PID" ]; then
                                                cat /dev/null > "$CATALINA_PID"
                                            else
                                                echo "Unable to remove or clear stale PID file. Start aborted."
                                                exit 1
                                            fi
                                        fi
                                    fi
                                else
                                    echo "Unable to read PID file. Start aborted."
                                    exit 1
                                fi
                            else
                                rm -f "$CATALINA_PID" >/dev/null 2>&1
                                if [ $? != 0 ]; then
                                    if [ ! -w "$CATALINA_PID" ]; then
                                        echo "Unable to remove or write to empty PID file. Start aborted."
                                        exit 1
                                    fi
                                fi
                            fi
                        fi
                    fi
        
                    shift
                    touch "$CATALINA_OUT"
                    if [ "$1" = "-security" ] ; then
                        if [ $have_tty -eq 1 ]; then
                            echo "Using Security Manager"
                        fi
                        shift
                        "$_RUNJAVA" "$LOGGING_CONFIG" $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_OUT" 2>&1 &
        
                    else
                        "$_RUNJAVA" "$LOGGING_CONFIG" $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_OUT" 2>&1 &
        
                    fi
        
                    if [ ! -z "$CATALINA_PID" ]; then
                        echo $! > "$CATALINA_PID"
                    fi
        
                elif [ "$1" = "stop" ] ; then
        
                    shift
        
                    SLEEP=5
                    if [ ! -z "$1" ]; then
                        echo $1 | grep "[^0-9]" >/dev/null 2>&1
                        if [ $? -gt 0 ]; then
                            SLEEP=$1
                            shift
                        fi
                    fi
        
                    FORCE=0
                    if [ "$1" = "-force" ]; then
                        shift
                        FORCE=1
                    fi
        
                    if [ ! -z "$CATALINA_PID" ]; then
                        if [ -s "$CATALINA_PID" ]; then
                            if [ -f "$CATALINA_PID" ]; then
                                kill -0 `cat "$CATALINA_PID"` >/dev/null 2>&1
                                if [ $? -gt 0 ]; then
                                    echo "PID file found but no matching process was found. Stop aborted."
                                    exit 1
                                fi
                            else
                                echo "\$CATALINA_PID was set but the specified file does not exist. Is Tomcat running? Stop aborted."
                                exit 1
                            fi
                        else
                            echo "PID file is empty and has been ignored."
                        fi
                    fi
        
                    "$_RUNJAVA" $JAVA_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
        
                    if [ ! -z "$CATALINA_PID" ]; then
                        if [ -f "$CATALINA_PID" ]; then
                            while [ $SLEEP -ge 0 ]; do
                                kill -0 `cat "$CATALINA_PID"` >/dev/null 2>&1
                                if [ $? -gt 0 ]; then
                                    rm -f "$CATALINA_PID" >/dev/null 2>&1
                                    if [ $? != 0 ]; then
                                        if [ -w "$CATALINA_PID" ]; then
                                            cat /dev/null > "$CATALINA_PID"
                                        else
                                            echo "Tomcat stopped but the PID file could not be removed or cleared."
                                        fi
                                    fi
                                    break
                                fi
                                if [ $SLEEP -gt 0 ]; then
                                    sleep 1
                                fi
                                if [ $SLEEP -eq 0 ]; then
                                    if [ $FORCE -eq 0 ]; then
                                        echo "Tomcat did not stop in time. PID file was not removed."
                                    fi
                                fi
                                SLEEP=`expr $SLEEP - 1 `
                            done
                        fi
                    fi
        
                    if [ $FORCE -eq 1 ]; then
                        if [ -z "$CATALINA_PID" ]; then
                            echo "Kill failed: \$CATALINA_PID not set"
                        else
                            if [ -f "$CATALINA_PID" ]; then
                                PID=`cat "$CATALINA_PID"`
                                echo "Killing Tomcat with the PID: $PID"
                                kill -9 $PID
                                rm -f "$CATALINA_PID" >/dev/null 2>&1
                                if [ $? != 0 ]; then
                                    echo "Tomcat was killed but the PID file could not be removed."
                                fi
                            fi
                        fi
                    fi
        
                elif [ "$1" = "version" ] ; then
        
                        "$_RUNJAVA"   \
                            -classpath "$CATALINA_HOME/lib/catalina.jar" \
                            org.apache.catalina.util.ServerInfo
        
                else
        
                    echo "Usage: catalina.sh ( commands ... )"
                    echo "commands:"
                    if $os400; then
                        echo "  debug             Start Catalina in a debugger (not available on OS400)"
                        echo "  debug -security   Debug Catalina with a security manager (not available on OS400)"
                    else
                        echo "  debug             Start Catalina in a debugger"
                        echo "  debug -security   Debug Catalina with a security manager"
                    fi
                    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, waiting up to 5 seconds for the process to end"
                    echo "  stop n            Stop Catalina, waiting up to n seconds for the process to end"
                    echo "  stop -force       Stop Catalina, wait up to 5 seconds and then use kill -KILL if still running"
                    echo "  stop n -force     Stop Catalina, wait up to n seconds and then use kill -KILL if still running"
                    echo "  version           What version of tomcat are you running?"
                    echo "Note: Waiting for the process to end and use of the -force option require that \$CATALINA_PID is defined"
                    exit 1
        
                fi
        

        谢谢,

        吉格尼什

        【讨论】:

          【解决方案5】:

          解决方案; 首先设置tomcat的pid CATALINA_PID="/id.pid" 导出 CATALINA_PID

          然后杀死它 catalina.sh 停止-强制

          来源:http://confluence.atlassian.com/pages/viewpage.action?pageId=216959212

          否则就像你提到的那样,只需使用 kill 命令杀死它

          ps aux | grep catalina
          kill <pid of tomcat>
          

          如果以上两种解决方案不能满足您的需求,请尝试以下方法:

          $ sudo service tomcat6 stop
          * Stopping Tomcat servlet engine tomcat6 [ OK ]
          $ sudo service tomcat6 start
          * Starting Tomcat servlet engine tomcat6 [ OK ]
          $
          

          当然还有更传统的方式:

          $ sudo /etc/init.d/tomcat6 stop
          * Stopping Tomcat servlet engine tomcat6 [ OK ]
          $ sudo /etc/init.d/tomcat6 start
          * Starting Tomcat ser
          

          【讨论】:

            【解决方案6】:

            在我这个问题的场景中,有一些线程没有成功终止,关闭消息发布到 tomcat,这使得 tomcat 进程仍然挂起。

            所以我将从普通的 tomcat 实例开始..并继续添加自定义“战争”或一一更改,并确保成功停止 tomcat 以缩小问题范围。

            【讨论】:

            • 这是需要测试的东西,但您认为它可以解释所有症状吗?
            【解决方案7】:

            问题是因为你用来启动tomcat(正常或调试模式)的地址已经被另一个进程占用了。

            您需要检查您在您的 conf 文件中使用的端口(例如 your_TOMCAT_HOME_DIR_/conf/server.xml),看看它们是否尚未使用

            这里可以查看使用的端口

            • 启动Tomcat:默认值8080
            • 停止 Tomcat:默认值 8005
            • 与 AJP 协议一起使用:默认值 8009

            如果您在调试模式下使用 Tomcat(通过 jdpa 或 jdwp ),请确保使用与之前配置的所有端口不同的端口

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2011-06-09
              • 1970-01-01
              • 2012-07-07
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多