Windows-Service

無法配置 tomcat 7 使用自己的 JDK

  • October 19, 2015

我在配置tomcat 7以在 Windows 上作為服務執行時遇到以下問題。

更具體地說,tomcat 是安裝在我們客戶伺服器上的 Web 應用程序的一部分,它必須在其中包含所有依賴項。

在這種情況下,tomcat 依賴於 Java JDK/JRE,所以我下載了一個帶有 jre 的獨立 jdk(版本 1.7u21)並將其放在 tomcat 文件夾中。

所以現在我的目錄樹是這樣的:

tomcat7
 - bin
 - conf
 - jdk
   - jre
 - logs
 - temp
 - webapps
 - work

然後我繼續使用命令將其安裝為服務

tomcat\bin\service.bat install

並且在jvm模式下安裝沒有問題。

請注意,我修改了 service.bat 文件,以便正確設置所有需要的變數,即 CATALINA_HOME、CATALINA_BASE、JAVA_HOME 和 JRE_HOME,最後兩個指向內部 jdk/jre。

但是,如果我嘗試啟動該服務,我會收到一條錯誤消息,指出它無法啟動該服務並引用錯誤程式碼 1。

查看tomcat日誌,它說:

[2013-05-22 12:22:09] [info]  [ 5392] Commons Daemon procrun (1.0.15.0 32-bit) started
[2013-05-22 12:22:10] [info]  [ 5392] Running 'AGEws2Tomcat7' Service...
[2013-05-22 12:22:10] [info]  [ 2764] Starting service...
[2013-05-22 12:22:10] [error] [ 2764] %1 is not a valid Win32 application.
[2013-05-22 12:22:10] [error] [ 2764] Failed creating java C:\AGEws\tomcat7\jdk\jre\bin\server\jvm.dll
[2013-05-22 12:22:10] [error] [ 2764] %1 is not a valid Win32 application.
[2013-05-22 12:22:10] [error] [ 2764] ServiceStart returned 1
[2013-05-22 12:22:11] [error] [ 2764] %1 is not a valid Win32 application.
[2013-05-22 12:22:11] [info]  [ 5392] Run service finished.
[2013-05-22 12:22:11] [info]  [ 5392] Commons Daemon procrun finished

我試著用Google搜尋一下這個部分Failed creating java,我發現了一些關於.dll文件可能依賴的資訊,我發現了這些資訊,但我不明白我應該把它放在哪裡,如果這確實是問題。

我還嘗試以java模式安裝服務,它可以工作,使用我電腦自己的 JVM 而不是內部的,而我需要它來使用內部的。

為了讓tomcatjvm使用自己的jdk/jre在模式下作為服務正常工作,我可以/必須做什麼?

請注意,我們的 web 應用程序曾經與 tomcat 5 一起發布,它在jvmmode 下執行良好。

最後我發現解決方案是將啟動和停止模式設置為java同時提供一個明確的 JAVA_HOME 選項

--JavaHome /path/to/internal/jdk

進行修改後,服務工作正常,即使在java模式而不是jvm舊服務的模式下也是如此。

為了澄清 Matteo 的答案(並幫助不太熟悉 Java 世界的 Windows 人員),我們在 64 位 Windows Server 2012(非 R2)上使用 Tomcat 8 時遇到了完全相同的問題。我們正在使用/配置 IBM Rational DOORS Help 9.6.1——儘管我們在嘗試在相對現代的 64 位 Windows 上進行配置時已經在大多數 IBM Java/Tomcat 風格的產品中看到了這一點。

我們必須使用以下內容更新位於 Tomcat 安裝目錄中的 service.bat 文件:

--StartMode java ^
--StopMode java ^
--JavaHome "C:\Program Files (x86)\Java\jre7" ^

啟動/停止選項從 ‘jvm’ 更改,JavaHome 選項是配置文件的新增內容。然後通過以下方式安裝服務:

service.bat install <service name>

在我們的例子中,服務名稱是 DOORS_Help。我們有一個 64 位 Tomcat 安裝和一個 32 位 JRE 安裝,它們顯然可以一起工作——這是供應商提供的。

編輯:另一個選項似乎是在安裝 Tomcat**之前手動設置 JRE_HOME 和 JAVA_HOME 環境變數。**否則,您將需要重新安裝 Windows 服務。我知道這種與原始文章相矛盾,但似乎並非所有 Tomcat 安裝都是一樣的!

引用自:https://serverfault.com/questions/509833