2012-10-17 101 views
5

大家好,我如何在Windows 2008服務器上運行一個java .jar文件作爲Windows服務?我有一個名爲SomeJavaFile.jar的jar文件,位於Windows Server 2008框的C:\ SomeDirectory目錄下。我通常只是在命令行中手動運行這個jar:java -cp SomeJavaFile.jar com.ctg.SomeJavaFile,我讓它運行24/7。如何在Windows Server 2008上將java .jar文件作爲Windows服務運行?

與我們的Windows服務器的問題是,如果它重新啓動我需要運行它作爲一個服務就會自動開始在啓動一個服務,因爲我們對衛康處理運行24/7。我搜索了一遍,並嘗試使用服務包裝和sc.exe命令來創建服務。

我把包裝service.exe放在C:\ SomeDirectory \中。我使用以下命令來創建它:sc.exe SomeJavaService binPath =「C:\ SomeDirectory \ service.exe \」java -jar C:\ SomeDirectory \ SomeJavaFile.jar \「」type = own start = auto error = ignore。這會正確創建SomeJavaService服務,但是當我嘗試啓動它時,出現一條說明本地計算機上的服務已啓動然後停止的錯誤。

某些服務如果未被其他服務或程序使用,則會自動停止。我是否需要通過在com.ctg.SomeJavaFile中添加sc改變我的sc.exe命令以確定以前的工作命令行?所以我應該改變這個jar應該在後臺運行,並不斷地輪詢/ ping C:/ poll目錄,如果存在數據,它會處理數據並將導出文件發送到另一個目錄。

我已經成功地使用這種相同的.jar文件多年,但並沒有改變,但我不能把它作爲Windows服務運行。這是我用來獲得服務包裝http://code.google.com/p/simple-service-wrapper/的網站。任何幫助將不勝感激!

 Shane 
+0

歡迎來到Stack Overflow。請閱讀常見問題解答,並對問題進行格式化,以便閱讀。 – 2012-10-17 19:31:25

回答

0

如果你開始從命令行Java代碼使用java -j some.jar它運行,直到終止程序,或者它停止本身?

有需要是一個非守護進程線程,運行所有的時間。如果沒有線程在運行,那麼JVM將終止,而不會被標記爲守護進程。

如果您的預算有限,請購買安裝工具。我使用instll4j。使用該工具,您可以創建服務啓動器並在安裝期間進行安裝。

3

「winsw」與Glassfish的Java EE的參考實現Windows服務安裝運輸的獨立版本。

效果很好,但不是完全拋光的產品 - 我已經用它出於這樣的目的了幾年。在Windows機器上需要某些最新版本的.NET。

https://github.com/kohsuke/winsw

+0

從當前版本(1.9)開始需要.Net Framework 3.5。 – DonBecker

1

我認爲最好的選擇將與Apache Commons DaemonProcrun來包裝你的Java應用程序。

Procrun是一組允許Windows用戶來包裝 (大部分)的Java應用程序(例如Tomcat)的作爲Windows服務的應用程序。

的服務可以設置爲自動啓動時,機器啓動 並將繼續沒有用戶登錄到計算機上運行。

1

按我的分析,

空閒解決方案將是寫一個VC++(.NET)的Windows服務創建程序來啓動.BAT(觸發jar文件)/。exe文件爲系統服務將所有必需的回調方法提供給SCM。

注意:1.使用sc.exe/srvany.exe封裝進程不起作用,因爲它沒有任何回調到SCM(服務控制管理器)的進程。 2.和java服務包裝是第三方API(許多LGPL許可)。

相關問題