我在Windows 2012上运行了一个Jenkins,Java促使我更新到一个较新的版本(jre1.8.0_261到jre1.8.0_271),在安装过程中,它要求卸载旧版本(出于安全原因),我允许它这样做。当我重新启动Jenkins服务时,它未能重新启动。错误日志指示此信息消息:
Starting C:\Program Files\Java\jre1.8.0_261\\bin\java.exe -Xrs -Xmx256m -Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle -jar "C:\Program Files\Jenkins\jenkins.war" --httpPort=8080 --webroot="C:\Windows\system32\config\systemprofile\AppData\Local\Jenkins\war"
这个错误是:
Service cannot be started. System.ComponentModel.Win32Exception (0x80004005): The system cannot find the file specified at System.Diagnostics.Process.StartWithCreateProcess(ProcessStartInfo startInfo) at winsw.Util.ProcessHelper.StartProcessAndCallbackForExit(Process processToStart, String executable, String arguments, Dictionary2 envVars, String workingDirectory, Nullable1 priority, ProcessCompletionCallback callback, Boolean redirectStdin, LogHandler logHandler, Boolean hideWindow) at winsw.WrapperService.StartProcess(Process processToStart, String arguments, String executable, LogHandler logHandler, Boolean redirectStdin) at winsw.WrapperService.OnStart(String[] args) at System.ServiceProcess.ServiceBase.ServiceQueuedMainCallback(Object state)
这条信息信息给了我一个提示: Jenkins指向这里的C:\Program Files\Java\jre1.8.0_261位置的旧版本。
然而,文件夹是空的,最重要的是没有bin文件夹存在(毫无疑问,由于上述卸载)。
这里更新的版本有完整的java二进制文件:C:\Program Files\Java\jre1.8.0_271
?
发布于 2020-10-23 15:47:33
有一个非常简单的解决方案:找到Jenkins.xml文件(对我来说,它位于C:\Program Files\Jenkins\jenkins.xml)并编辑它。
找到<executable>元素并更正它,以便它指向新的JRE路径,例如,在我的例子中,我更改了
这个<executable>C:\Program Files\Java\jre1.8.0_261\bin\java.exe</executable>
对于这个<executable>C:\Program Files\Java\jre1.8.0_271\bin\java.exe</executable>
保存文件,Jenkins现在就可以启动了。
发布于 2020-10-24 01:36:21
请参阅@Jeff Mergler's的回答。
我们通过使用链接来解决整个问题。mklink /D C:Java\jre1.8 C:\Program Files\Java\jre1.8.0_261,并将其放在jenkins.xml中。我们首先手动安装jdk,然后停止所有应用程序,重新指向一个链接并启动所有应用程序。然后删除旧jdk。我们还有一个8的链接和一个11的链接。我们在linux端也是这样做的,我们从linux端提升了解决方案!
此外,根据甲骨文的新授权条款,您应该使用像adoptOpenJDK这样的东西来避免与Big的术语发生冲突。
C:\Tools\Java>echo %JAVA_HOME%
C:\Tools\Java\jdk
C:\Tools\Java>dir
Volume in drive C is L103437
Volume Serial Number is 28B0-4574
Directory of C:\Tools\Java
2020-10-28 12:43 PM <DIR> .
2020-10-28 12:43 PM <DIR> ..
2020-08-19 11:59 AM <SYMLINKD> jdk [jdk1.8]
2020-10-28 12:41 PM <DIR> jdk-11.0.9.11-openj9
2020-08-05 12:14 AM <SYMLINKD> jdk1.6 [jdk1.6.0_211]
2020-08-05 12:13 AM <DIR> jdk1.6.0_211
2020-03-11 01:31 AM <DIR> jdk1.8.0_231
2020-10-28 12:40 PM <DIR> jdk1.8.0_271
0 File(s) 0 bytes
8 Dir(s) 162,629,304,320 bytes free
C:\Tools\Java>mklink /D jdk1.8 jdk1.8.0_231
symbolic link created for jdk1.8 <<===>> jdk1.8.0_231
C:\Tools\Java>java -version
java version "1.8.0_231"
Java(TM) SE Runtime Environment (build 1.8.0_231-b32)
Java HotSpot(TM) 64-Bit Server VM (build 25.231-b32, mixed mode)
C:\Tools\Java>unlink jdk1.8
C:\Tools\Java>mklink /D jdk1.8 jdk1.8.0_271
symbolic link created for jdk1.8 <<===>> jdk1.8.0_271
C:\Tools\Java>java -version
java version "1.8.0_271"
Java(TM) SE Runtime Environment (build 1.8.0_271-b32)
Java HotSpot(TM) 64-Bit Server VM (build 25.271-b32, mixed mode)
C:\Tools\Java> dir
2020-08-19 11:59 AM <SYMLINKD> jdk [jdk1.8]
2020-10-28 12:44 PM <SYMLINKD> jdk1.8 [jdk1.8.0_271]
2020-03-11 01:31 AM <DIR> jdk1.8.0_231
2020-10-28 12:40 PM <DIR> jdk1.8.0_271在上面的示例中,JAVA_HOME=C:\Tools\Java\jdk和PATH=%JAVA_HOME%\bin;%PATH%。jdk是一个sym链接,目前指向jdk1.8,在上面的示例中,从1.8.0_231到1.8.0_271 (不要忘记包含目录链接的/D )。
jenkins.xml可以通过以下任何一个引用可执行文件:
<executable>java.exe</executable>
<executable>%JAVA_HOME%\bin\java.exe</executable>
<executable>C:\Tools\Java\jdk1.8\bin\java.exe</executable>
或者,如果要针对特定版本进行验证:
<executable>C:\Tools\Java\jdk1.8.0_271\bin\java.exe</executable>
https://serverfault.com/questions/1039864
复制相似问题