`

docker下面tomcat执行startup.sh问题

 
阅读更多
在做docker的时候,碰到了如果使用startup.sh是无法成功启动tomcat,
一定要使用catalina.sh run
后来看到文章: ant sshexec 无法启动tomcathttp://www.lxway.com/61161411.htm, 然后参考catalina.sh的详解: http://www.cnblogs.com/huzhiwei/archive/2012/03/13/2393393.html

发现: 运行startup.sh的时候,程序进入到
elif [ "$1" = "start" ] ; then
  echo "Tomcat started------->start."
  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."
            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."
          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
    echo "Tomcat started------->started->security"
    shift
    eval "\"$_RUNJAVA\"" "\"$LOGGING_CONFIG\"" $LOGGING_MANAGER $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
    echo "Tomcat started------->started->no security"
    eval "\"$_RUNJAVA\"" "\"$LOGGING_CONFIG\"" $LOGGING_MANAGER $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

  echo "Tomcat started."


问题出在于:org.apache.catalina.startup.Bootstrap "$@" start \
      >> "$CATALINA_OUT" 2>&1 "&"  重定向了日志之后,有多了一个&符号, 是这个符号导致启动失败的.  去掉就好了.
源码的第384和393行
分享到:
评论

相关推荐

    最新版linux apache-tomcat-8.5.69.tar.gz

    - 配置启动脚本,如`bin/startup.sh`和`bin/shutdown.sh`,使其适应Linux环境。 3. **安全管理**: - 修改默认的管理员账号密码,防止未授权访问管理界面。 - 配置`conf/tomcat-users.xml`来管理用户角色和权限...

    docker手动创建tomcat容器且端口映射且磁盘对应

    /data/application/app/webserver/apache-tomcat-8.0.32/bin/startup.sh ``` 六、查看 Tomcat 进程 我们可以使用以下命令来查看 Tomcat 进程: ``` ps -ef | ``` 这将显示 Tomcat 进程的详细信息。 总结来说,本文...

    Dubbo+Zookeeper+Tomcat.rar

    可以从Tomcat官网下载适合版本的Tomcat压缩包,同样使用`tar`命令解压,然后通过`bin/startup.sh`启动Tomcat服务。Dubbo的应用程序通常是以WAR包的形式部署到Tomcat的`webapps`目录下,Tomcat会自动识别并解压WAR包...

    分享一个linux环境下在tomcat中发布项目的方式

    Tomcat的bin目录包含可执行脚本,如用于启动和停止服务器的`startup.sh`和`shutdown.sh`。根据你的安装路径,这可能是 `/usr/local/apache-tomcat-6.0.26/bin`。 示例:`cd /usr/local/apache-tomcat-6.0.26/bin`...

    Apache-tomcat-8.0.0 for centos

    5. **启动和管理Tomcat**:使用`bin/startup.sh`和`bin/shutdown.sh`脚本启动和停止Tomcat服务。 6. **防火墙设置**:如果需要,配置防火墙规则以允许外部访问Tomcat服务。 7. **部署应用**:将Web应用程序的WAR...

    Linux(Ubuntu)系统部署web项目

    4. 给Tomcat的启动脚本赋权:`sudo chmod +x /opt/tomcat/bin/startup.sh` 启动Tomcat服务器:`sudo /opt/tomcat/bin/startup.sh`,通过访问`http://your_server_ip:8080`来检查Tomcat是否正常运行。 然后,我们...

    linux下java项目部署

    创建一个名为`tomcat`的用户,修改`/opt/tomcat`的所有权,并在`bin/startup.sh`和`bin/shutdown.sh`中设置正确的用户。 8. **监控与日志管理**:配置Tomcat的日志输出,以便于故障排查。`logs`目录下的`catalina....

    jenkins环境搭建

    进入`apache-tomcat-7.0.70/bin/`目录,执行`./startup.sh`脚本来启动Tomcat服务。 4. **访问Jenkins** 通过浏览器访问Jenkins的Web界面: ``` http://&lt;服务器IP&gt;:8080/jenkins/ ``` 示例中的IP为`172.24....

    linux相关软件安装配置

    - 执行启动脚本:`./startup.sh`。 - 查看日志文件以确认服务是否启动成功。 #### Linux Redis 安装与配置 **1. 安装 Redis** - 有两种方式来安装 Redis: **例 1**: - 从源码编译安装。 - 使用包管理工具...

    Linux下OA的安装

    接着,我们需要进入 Tomcat 的 bin 目录,并运行 startup.sh 脚本启动 Tomcat 服务器。 安装 OA 现在,我们可以安装 OA 系统了。首先,我们需要将 OA 的安装包解压缩到/opt 目录下,然后将其复制到 Tomcat 的 ...

    开发数据包,环境搭建必备

    接着,设置CATALINA_HOME环境变量指向Tomcat的根目录,并可以通过bin目录下的startup.sh(或startup.bat)启动Tomcat服务器。为了调试和管理,可以利用Tomcat提供的Web管理界面——Manager App和Host Manager。 在...

    Jenkins安装 文档

    - 切换到Tomcat的`bin`目录,如 `/usr/local/apache-tomcat-6.0.18/bin`,执行`./startup.sh`启动Tomcat。 - 将`jenkins.war`文件复制到Tomcat的`webapps`目录下。当Tomcat重新启动时,它会自动展开`jenkins.war`...

    jenkins.war

    对于Tomcat,可以通过命令行执行`bin/startup.sh`(Unix/Linux)或`bin/startup.bat`(Windows)。 4. **访问**:打开浏览器输入`http://your_server:port/jenkins`,首次访问会引导你设置初始管理员密码。 **...

    Jenkins安装部署01101

    ./startup.sh ``` 检查Tomcat日志确认无错误,然后通过`http://ip:8080/jenkins`访问Jenkins初始化页面。 **三、Jenkins安装流程** - 查找并输入初始化管理员密码,该密码位于`/data/jenkins/home/secrets/...

    Linux开发环境搭建1

    启动Tomcat服务器,我们可以进入其bin目录,执行`./startup.sh`命令。 MySQL数据库是许多Web应用程序的基础。为了安装MySQL,我们需要先添加MySQL的软件源,然后使用`apt-get`命令进行安装。在Ubuntu中,我们可以...

    Jenkins安装和使用.docx

    然后,直接启动 bin 目录下的 startup.sh 脚本,浏览器直接访问 Jenkins。 三、Jenkins 的使用 Jenkins 的使用需要了解其原理。开发者将代码提交到 git、svn 代码服务器,然后 Jenkins 将代码拉取到工作空间。...

Global site tag (gtag.js) - Google Analytics