windows - 无法在 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”扩展,但两者都没有改变任何东西。
非常感谢任何解决此问题的提示。
解决方案
推荐阅读
- azure - Azure 存档操作和定价
- html - Box-shadow 与 div top/down/left/bottom 周围的其他 div 重叠吗?
- python - 在 Python 中返回格式正确的递归列表
- twilio - 希望接听拨打 twilio 美国电话号码的电话(我在国外)
- neo4j - neo4j 为现有节点生成唯一 ID
- scons - 在一个 Scons 构建中编译多个 Godot 目标
- java - 即使我将更改后的 ArrayList 作为返回值返回,我在函数中填写的 ArrayList 也不会影响其余代码中的 ArrayList
- c# - 在创建单元测试时,我能做些什么来防止该方法被调用?
- xamarin.forms - Listview 在 iOS 上滚动,但不是在 Android 上滚动
- c# - 有没有办法在我的 C# 项目中为我的自适应卡使用本地图像而不是 Web-URL?