【问题标题】:Problem getting tomcat to start up on reboot [duplicate]让tomcat在重新启动时启动的问题[重复]
【发布时间】:2010-12-21 18:18:31
【问题描述】:

我无法启动 tomcat

我按照这些说明让 tomcat / apache2 运行:

http://www.mogilowski.net/?p=121

...但是 tomcat 在重新启动时无法启动。以下是日志中的消息:

Nov 30, 2009 6:59:53 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in 13009 ms
Nov 30, 2009 6:59:53 PM org.apache.catalina.core.StandardServer await
SEVERE: StandardServer.await: create[8005]:
java.net.BindException: Address already in use
        at java.net.PlainSocketImpl.socketBind(Native Method)
        at java.net.PlainSocketImpl.bind(PlainSocketImpl.java:359)
        at java.net.ServerSocket.bind(ServerSocket.java:319)
        at java.net.ServerSocket.<init>(ServerSocket.java:185)
        at org.apache.catalina.core.StandardServer.await(StandardServer.java:373)
        at org.apache.catalina.startup.Catalina.await(Catalina.java:647)        at org.apache.catalina.startup.Catalina.start(Catalina.java:607)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:2
5)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
        at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
Nov 30, 2009 6:59:53 PM org.apache.coyote.http11.Http11Pro

它说 [8005] 已经在使用中,但是 netstat -napa 显示没有人拥有该端口。

我可以通过运行手动启动它

/etc/init.d/tomcat stop

然后执行 netstat 并杀死具有端口 8080 的进程并执行

/etc/init.d/tomcat start

尝试删除 init.d tomcat 脚本、引导系统并运行 netstat -napa 以查看是否有人拥有端口 8080 或 8000 到 8009,但没有人拥有。新启动时到此端口的“telnet”给了我

root@domU-12-31-39-00-A1-C4:/usr/local/tomcat/logs# telnet localhost 8005
Trying 127.0.0.1...
telnet: Unable to connect to remote host: Connection refused

..但是如果我尝试手动或通过 init.d 脚本启动 tomcat,它会第一次失败,抱怨“地址已在使用中”

有什么想法吗?

【问题讨论】:

    标签: java tomcat init.d


    【解决方案1】:

    您是否有可能正在运行另一个 Tomcat 实例?例如,如果系统启动时在您不知情的情况下运行了 Tomcat 启动脚本,那么您收到此错误是有道理的。

    【讨论】:

    • 我在想某处某处试图启动 Tomcat 两次。但是 Tomcat 不会在运行,而只是第二个实例尝试会失败?在我的情况下——在干净地引导机器之后——Tomcat 不会启动。 8080 等上什么都听不到。
    【解决方案2】:

    它说 [8005] 已经在使用中,但是 netstat -napa 显示没有人拥有该端口。

    nobody 可能正在运行另一个 Web 服务器...

    但是说真的,你用来启动tomcat的init脚本的内容是什么,netstat -tnlpe | grep $yourport对进程的所有者说了什么?

    【讨论】:

    • 有趣的是,谷歌 [netcat -tnlpe] 作为显示所有 SO 内容农场网站的好词!
    【解决方案3】:

    如果您在上一次关闭完成之前或在不干净的关闭之后尝试重新启动,您可能会从 tomcat 收到此类错误 - 例如,如果您有一个 web 应用程序启动一些手动管理的线程并让它们挂起,然后调用tomcat关闭脚本,tomcat服务会在端口上停止响应,但进程不会死。

    看起来该页面上的 apache 脚本调用了 tomcat 重新启动(即关闭、启动),然后您也配置了 tomcat 服务,因此如果首先加载 apache 脚本,tomcat start 将在 tomcat 已经运行的情况下被调用,如果tomcat 首先你会在tomcat 已经运行的情况下调用shutdown/startup。

    【讨论】:

    • 好吧,当机器重新启动时它永远不会正常启动,所以我不认为它是在关机后不干净的。是不是Apache启动和Tomcat启动都在尝试启动Tomcat?
    • 您是否同时安装了 Apache 和 Tomcat?
    【解决方案4】:

    除了别人的解释: ps -ux 将向您显示 tomcat(与启动它的用户一起执行),kill pid 将显示进程(pid 是进程 ID)

    【讨论】:

      【解决方案5】:

      常见的错误是在您的 server.xml 配置文件中使用相同的 Shutdown 和 Connector 端口。

      这些端口应该不同,下面是正确的示例:

      <Server port="8005" shutdown="SHUTDOWN">
          <Connector port="8983" protocol="HTTP/1.1"
      

      默认情况下,Tomcat 在端口 8005 上侦听 SHUTDOWN 命令,并且它应该始终与连接器端口不同。

      如果您的端口仍在使用中,请尝试sudo lsof -i:8005 查找原因。

      【讨论】:

        猜你喜欢
        • 2019-03-03
        • 2017-11-03
        • 1970-01-01
        • 1970-01-01
        • 2020-08-25
        • 1970-01-01
        • 2012-06-07
        • 2010-10-21
        • 2019-04-13
        相关资源
        最近更新 更多