【问题标题】:Tomcat won't stop or restartTomcat 不会停止或重新启动
【发布时间】:2012-09-04 09:06:07
【问题描述】:

我尝试停止 tomcat。失败并显示此消息:

  • Tomcat 没有及时停止。 PID 文件未删除。

然后我再次尝试并得到了这个:

  • PID 文件 (/opt/tomcat/work/catalina.pid) 找到但没有匹配 发现进程。停止中止。

然后我尝试在调试模式下启动 tomcat 并得到了这个:

  • 找到 PID 文件 (/opt/tomcat/work/catalina.pid)。 Tomcat还在吗 跑步?开始中止。

我他们删除了 /opt/tomcat/work/catalina.pid 并尝试重新启动并得到了这个:

  • $CATALINA_PID 已设置 (/opt/tomcat/work/catalina.pid) 但 指定的文件不存在。 Tomcat 正在运行吗?停止中止。

有人知道如何重启tomcat吗?

【问题讨论】:

  • ps 说什么(假设您在某些 *nix 上运行 Tomcat)?
  • Windows 使用 Linux 模拟器。 ps 返回“webadmin 24735 23900 0 13:28 pts/0 00:00:00 grep tomcat”
  • 在我知道的环境中,ps -ef | grep java 会给你 Tomcat 实例的进程 ID(可能在其他 Java 进程中)。你看到了什么?

标签: tomcat catalina


【解决方案1】:

我在 Linux 服务器上启动了 第二个 Tomcat 服务器时收到此错误消息。

$CATALINA_PID was set but the specified file does not exist. Is Tomcat running? Stop aborted.

在启动第二个 Tomcat 时,我按照要求设置了 CATALINA_PID,但我的错误是将其设置为一个目录(我认为 Tomcat 会在其中写入一个带有 pid 的默认文件名)。

解决方法只是更改我的 CATALINA_PID 以在其末尾添加一个文件名(我从上面的示例中选择了 catalina.pid)。接下来我进入目录,做了一个简单的:

touch catalina.pid

创建一个正确名称的空文件。然后,当我执行shutdown.sh 时,我收到消息说:

PID file is empty and has been ignored.
Tomcat stopped.

由于 JVM 正在使用中,我无法选择终止 Tomcat,所以我很高兴找到了这个。

【讨论】:

  • 你在说什么tomcat从不要求设置CATALINA_PID
  • 不确定我理解你@PhilipRego。你是回复我还是回复#SmallChess。对不起。很高兴详细说明。
  • "我已经按照要求设置了 CATALINA_PID" Tomcat 不会要求您进行设置。
  • 这应该被标记为正确答案。我检查了你的解释,它完全符合预期的行为。感谢您发布此信息!
【解决方案2】:

看来 Tomcat 实际上已经停止了。我开始了它,它开始很好。谢谢大家。

【讨论】:

  • 哈,我没注意并注意到您试图重新启动它而不是启动它!哎呀
【解决方案3】:

最近我遇到过几次停止异常。虽然shutdown.sh提供了一些信息,但情况有:

  • ps -ef| grep java 命令的结果为 Null。
  • 命令ps -ef| grep java 的结果不为空。

我的意见只是杀死Catalina的进程并删除pid文件(在你的情况下是/opt/tomcat/work/catalina.pid。)

结果似乎没有那么严重地影响他人。

【讨论】:

    【解决方案4】:

    确保 Tomcat 当前未在运行并且 PID 文件已删除。他们应该成功启动 Tomcat。

    如果你重新开始,那么:

    1. <CATALINA_HOME>/bin 中创建setenv.sh 文件。
    2. 我在其中设置了 CATALINA_PID=/tmp/tomcat.pid(或您选择的其他目录),以便您可以更好地控制 Tomcat 进程。

    然后启动Tomcat在<CATALINA_HOME>/bin中找到catalina.sh并执行:

    ./catalina.sh start
    

    并停止它运行:

    ./catalina.sh stop 10 -force
    

    来自catalina.sh 脚本文档:

    ./catalina.sh
    
    Usage: catalina.sh ( commands ... )
    commands:
    
    start             Start Catalina in a separate window
    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
    

    注意:如果您想使用-force 标志,则必须设置CATALINA_PID

    【讨论】:

      【解决方案5】:

      有时如果重启后运行相同的pid,tomcat 将无法启动

      我的 pid 文件位于 apache-tomcat/temp/tomcat.pid

      作为一个解决方案,我只检查 PID 是否是 Catalina 的

      更改文件 apache-tomcat/bin/catalina.sh 关于第 386 行

      来自ps -p $PID >/dev/null 2>&1

      ps -fp $PID |grep catalina >/dev/null 2>&1

      catalina.sh 文件摘录

       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 -fp $PID |grep catalina >/dev/null 2>&1  #this line
                if [ $? -eq 0 ] ; then
                  echo "Tomcat appears to still be running with PID $PID. Start aborted."
                  echo "If the following process is not a Tomcat process, remove the PID file and try again:"
                  ps -f -p $PID
                  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."
      

      【讨论】:

        【解决方案6】:

        您可以前往该地点 ${CATALINA_HOME}/日志/ 打开 catalina.pid。在这里,我们将获得 pid。 然后终止进程。 杀死 -9 pid

        【讨论】:

          【解决方案7】:

          你试过$ sudo ./catalina.sh stop吗?它在我的情况下有效。

          【讨论】:

            【解决方案8】:

            第一 --> rm catalina.engine

            那么 -->./startup.sh

            下次你重新启动 --> ./shutdown.sh -force

            【讨论】:

              【解决方案9】:

              您的情况下缺少 catalina.pid。

              此文件位于 {your_jira_dir}/work/catalina.pid 下,其中包含当前 jira 实例的 pid。

              所以

              ps aux | grep jira
              
              • 找到正确的条目
              • 复制输出的 PID 并创建一个仅包含此 PID 的文件。 - 确保它可以被运行 jira 的用户读写。
              • 再次尝试关闭 jira。

              【讨论】:

                【解决方案10】:

                sudo systemctl stop tomcat

                为我做的

                【讨论】:

                  【解决方案11】:

                  如果遇到此类问题,您可以随时尝试终止该进程。 您可以从 PS 或 pid 文件中获取进程 ID 并终止进程。

                  【讨论】:

                    【解决方案12】:

                    就我而言,tomcat.pid 位于 /opt/tomcat/temp/ 下。试图手动删除它。仍然没有工作。 查看/opt/tomcat/bin/中的setnev.sh后,注意有一行代码定义了JAVA_HOME:

                    export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.212.b04-0.el7_6.x86_64/jre
                    

                    注释掉这一行,重启Tomcat。有用!因为我做了一个 yum 更新和一个新的从 1.8.0.212 到 1.8.0.222 的 Java 小版本更新。经验教训:应避免硬编码。

                    【讨论】:

                      【解决方案13】:

                      我遇到了下面提到的同样的问题。

                      PID file found but no matching process was found. Stop aborted.

                      解决方法是通过以下命令查找linux机器的空闲空间

                      df -h

                      上述命令显示我的主目录已 100% 使用。然后使用以下命令确定要删除哪些文件

                      du -h .

                      删除后,可以在linux机器上进行IO操作,tomcat也可以启动了。

                      【讨论】:

                        【解决方案14】:

                        关注这个:)

                        1. 打开/etc/systemd/system/tomcat.service

                        你能看到 JAVA_HOME 吗? : 修改如下

                        Environment="JAVA_HOME=/usr/lib/jvm/java-1.11.0-openjdk-amd64"
                        

                        在 1.11.0 - 插入您自己的 Jdk 版本

                        1. systemctl daemon-reload

                        2. sudo systemctl start tomcat


                        现在,在 eclipse -> 添加服务器 -> .....

                        tomcat installation directory ??

                        击中
                        1. Extract你已经下载的tomcat tar文件。
                        2. 现在回到 eclipse -> 添加服务器 -> 浏览 -> Point to extracted file (在上面的步骤 1 中完成 :)

                        如果你也被其他地方击中,请发表评论)

                        【讨论】: