2

我无法启动 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,它将第一次失败,抱怨“地址已在使用”

有任何想法吗?

4

5 回答 5

1

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

于 2009-11-30T19:58:45.313 回答
1

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

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

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

于 2009-11-30T19:24:19.260 回答
0

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

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

于 2009-12-01T21:48:06.540 回答
0

除了其他人的解释: ps -ux将向您展示tomcat(与启动它的用户一起做),以及kill pid进程(pid是进程id)

于 2009-12-01T21:51:01.153 回答
0

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

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

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

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

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

于 2015-04-06T21:03:39.193 回答