在Windows系统更新后无法启动Jenkins服务

28

我在Windows上将Jenkins作为服务运行,通常情况下,它会在机器启动时自动启动。

今天下午进行了一次Windows推荐的更新并重启计算机后,我的Jenkins突然停止工作。

我启动服务,但它会停止并显示以下警告:

"The Jenkins service on Local Computer started and then stopped. Some 
services stop automatically if they are not in use by other services or 
programs."

没有找到"jenkins.err.log"文件,但如果我使用命令"java jenkins.war"启动Jenkins, 就能正常运行。

这是怎么回事呢?如何解决?请帮帮忙。

非常感谢。


手动启动服务并将服务设置为手动模式,Windows中默认情况下为自动模式。 - Chandra Sekhar Y
11个回答

63

我也遇到了相同的问题。事实上,Java运行环境已经更新。在Jenkins安装文件夹中有一个jenkins.wrapper.log文件,其中记录了来自jenkins.exe服务包装程序的日志。在我的情况下,它试图从c:\Program Files\Java\jre1.8.0_144\bin启动Java。但是这个文件夹不存在,相反,Java被安装在c:\Program Files\Java\jre1.8.0_161\bin。

Jenkins安装文件夹中还有一个jenkins.xml文件。该文件包含中的对Java安装的引用。将其更改为当前的Java安装位置,Jenkins就可以重新启动。


这个视频也会帮助你:https://youtu.be/0q_iZ9a3HJE - Amol Thakurdware

6

如果您的Java路径正确,请在jenkins.xml中禁用RunawayProcessKiller

extension enabled="**false**" className="winsw.Plugins.RunawayProcessKiller.RunawayProcessKillerExtension"

我的问题也与jenkins.pid相关的runaway路径有关。您可以找到有问题的挂起进程或重新启动服务器,而不是禁用进程杀手。 - David

5

每次Java更新后,我也遇到了这个问题。但是有一个与版本无关的绝对路径,可以用来启动Java运行时:C:\ProgramData\Oracle\Java\javapath\java.exe。

我修改了jenkins-slave.xml文件,使用了这个路径:

<executable>C:\ProgramData\Oracle\Java\javapath\java.exe</executable>

3
如果在jenkins.xml/jenkins-slave.xml文件中正确设置了java.exe路径,但问题仍然存在,则尝试删除jenkins_agent.pid文件并重新启动服务。

1
在我的情况下,这是在我安装了一些更新之后发生的。经过一些研究(jenkins.err.log),发现有些其他应用程序占用了Jenkins一直使用的8080端口。
我用TcpView识别出了该应用程序并将其禁用。
问题得到解决。

1

在我的情况下,我安装了JDK 17.0.2,但Jenkins需要JDK 8到11版本。 请检查C:\Program Files\Jenkins\jenkins.err下的错误日志以获取准确的错误信息。


0
我的问题是安装了一个(不需要的)服务,它也在8080端口上监听。由于Jenkins正在运行,因此该服务在安装时无法启动,但是在重新启动后,流氓服务更快地启动并占用了该端口。解决方法是禁用不需要的服务。
来自jenkins.err.log:
java.net.BindException: Address already in use: bind
Caused: java.io.IOException: Failed to bind to 0.0.0.0/0.0.0.0:8080

0
你的首要任务应该是查看Windows事件查看器日志,以更好地了解潜在错误。在我这个例子中,错误信息如下所示:
Service cannot be started. System.ComponentModel.Win32Exception (0x80004005): Access is denied
   at System.Diagnostics.ProcessManager.OpenProcess(Int32 processId, Int32 access, Boolean throwIfExited)
   at System.Diagnostics.Process.GetProcessHandle(Int32 access, Boolean throwIfExited)
   at System.Diagnostics.Process.OpenProcessHandle(Int32 access)
   at System.Diagnostics.Process.get_Handle()
   at winsw.Plugins.RunawayProcessKiller.RunawayProcessKillerExtension.OnWrapperStarted()
   at winsw.Extensions.WinSWExtensionManager.FireOnWrapperStarted()
   at winsw.WrapperService.OnStart(String[] args)
   at System.ServiceProcess.ServiceBase.ServiceQueuedMainCallback(Object state)

您可以通过查看jenkins.xml来检查Jenkins配置。在我的情况下,这包括了一个RunawayProcessExtension的配置,它会在启动新实例之前终止上一个Jenkins实例。 <pidfile>条目存储了最后一个已知Jenkins实例的PID的文本文件的位置。

在我的情况下,这个<pidfile>指向的PID已经不再被运行中的Jenkins进程使用。相反,该插槽已被系统进程(csrss.exe)接管,导致RunawayProcessExtension在尝试终止它时抛出一个带有“访问被拒绝”消息的异常。 Jenkins本身没有启动,因为它期望RunawayProcessExtension先终止。

解决方案是删除<pidfile>,然后重新启动服务。


0

这是因为Jenkins无法找到Java(JDK)路径。请检查jenkins.xml文件中的JDK路径。

解决此问题 java -version
where java
检查jdk/bin -- 复制此jdk路径 进入jenkin.xml文件并更改Java路径


目前你的回答不够清晰,请[编辑]以添加更多细节,帮助其他人理解它如何回答问题。你可以在帮助中心找到有关如何编写好答案的更多信息。 - Community

-3

解决这个问题,请按照以下步骤进行:

  1. 打开窗口任务管理器(使用CTRL + ALT + Delete按钮)
  2. 在任务管理器中导航到服务
  3. 点击任务管理器上的“服务”按钮
  4. 服务窗口将打开 > 搜索Jenkins服务并重新启动/启动Jenkins服务 参考图片 - Jenkins服务
  5. 现在尝试访问Jenkins,问题已解决

你好Ajit,很抱歉这样做行不通。问题说:“我启动服务但它停止了”,所以重新启动/启动是行不通的,因为该服务使用错误的Java版本启动。已经解决。感谢您的贡献。 - koxta

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接