首页 > 解决方案 > 无法在 Windows Server 2012 上重新启动 Jenkins(正在使用的端口)

问题描述

我在运行正常的 Windows Server 2012 上运行 Jenkins,但我无法重新启动 Jenkins,例如在更新插件后。

我在 jenkins.err.log 中得到的错误是

SEVERE  winstone.Logger#logInternal: Container startup failed
java.net.BindException: Address already in use: bind
    at sun.nio.ch.Net.bind0(Native Method)
    at sun.nio.ch.Net.bind(Unknown Source)
    at sun.nio.ch.Net.bind(Unknown Source)
    at sun.nio.ch.ServerSocketChannelImpl.bind(Unknown Source)
    at sun.nio.ch.ServerSocketAdaptor.bind(Unknown Source)
    at org.eclipse.jetty.server.ServerConnector.openAcceptChannel(ServerConnector.java:342)
Caused: java.io.IOException: Failed to bind to 0.0.0.0/0.0.0.0:8080
    at org.eclipse.jetty.server.ServerConnector.openAcceptChannel(ServerConnector.java:346)
    at org.eclipse.jetty.server.ServerConnector.open(ServerConnector.java:308)
    at org.eclipse.jetty.server.AbstractNetworkConnector.doStart(AbstractNetworkConnector.java:80)
    at org.eclipse.jetty.server.ServerConnector.doStart(ServerConnector.java:236)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
    at org.eclipse.jetty.server.Server.doStart(Server.java:396)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
    at winstone.Launcher.<init>(Launcher.java:187)
Caused: java.io.IOException: Failed to start Jetty
    at winstone.Launcher.<init>(Launcher.java:189)
    at winstone.Launcher.main(Launcher.java:362)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at Main._main(Main.java:375)
    at Main.main(Main.java:151)

显然,Jenkins 运行的端口(8080)在重启后仍在使用。

服务器控制台给了我这个:

Child process [5424 - C:\Program Files (x86)\Jenkins\jre\bin\java -Xrs -Xmx512m -Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle -Dhudson.model.DirectoryBrowserSupport.CSP="sandbox; default-src 'none'; img-src 'self'; style-src 'self' 'unsafe-inline';" -jar "C:\Program Files (x86)\Jenkins\jenkins.war" --httpPort=8080 --ajp13Port=-1 --webroot="C:\Program Files (x86)\Jenkins\war"] finished with 1

我已经使用 netstat 检查了哪个进程正在使用端口 8080,但找不到任何东西。我知道我可以在使用“httpPort”标志启动 Jenkins 时更改端口。这样做(例如将端口更改为 8081)将起作用 - 直到我再次重新启动 Jenkins,这一次 8081 将被使用(以及 8080 和我之前使用的所有其他端口)。这只能通过重新启动服务器来解决,然后 8080(和所有其他端口)将再次可用。

两种“解决方案”(1. 不断更改端口,2. 重新启动服务器)对我来说只是乏味的解决方法,因为我必须通知所有同事当前一直在使用哪个端口,或者让管理人员一遍又一遍地重新启动服务器. 标志“--ajp13Port=-1”是为了解决这个问题,我还尝试按照另一篇文章中的建议禁用“RunawayProcessKiller”扩展,但两者都没有改变任何东西。

非常感谢任何解决此问题的提示。

标签: windowsjenkinswindows-server-2012-r2

解决方案


推荐阅读