2012-03-07 208 views
1

現狀:啓動Java jar文件

我有服務器PC上的jar文件(PC充當服務器),a.jar文件,這將運行無限循環來監聽TCPIP連接從客戶端PC。當連接已經完成,客戶端PC可以發送一個壓縮文件到服務器PCa.jar文件將其解壓縮並與壓縮,這將再掀全屏幕顯示的java文件,b執行腳本。罐子

a.jar文件也將試圖在啓動過程中運行b.jar,如果b.jar已經存在。


方法1:

/etc/init.d/中寫了一個腳本來啓動a.jar文件,因爲它是無限循環,系統在啓動過程中永遠掛( 在終端屏幕上,甚至不能進入GUI)。我必須啓動到單用戶模式以刪除該腳本才能正常啓動。


方法2:

當我改變了腳本a.jar文件運行作爲一個守護進程,它運行正常,監聽連接,我可以連接到服務器PC和發送zip文件。

問題:

  1. b.jar當執行權限和文件都正確設置甚至沒有執行。
  2. 我發送一個zip文件後,b.jar被執行(,因爲它連接到一個設備,該設備被激活)。但是全屏顯示不像通過終端執行時那樣顯示。

這樣

它可能的原因似乎有點複雜,但因爲b.jar將不斷更新,它必須是自動啓動時更新後,因此我使用a.jar來解壓並執行新版本fo b.jar

and b.jar需要以root身份運行,因爲它需要訪問串口。

(需要實現自動化服務器PC,因此需要啓動時啓動b.jar和遠程控制


問題

我可以知道的是有沒有更好的方法來做到這一點?或者我做錯了什麼?有人能給我看一個更好的腳本來啓動它在啓動過程中嗎?

回答

1

方法1應該可以工作,但您必須在後臺運行java進程,方法是在命令中添加&

但是,有更好的解決方案來作爲deamon運行java應用程序。以上可以被認爲是一個快速修復。

3

我認爲,如果你想要運行的應用程序作爲一個守護進程,最好的解決辦法是使用Apache Jsvc

的jsvc是製作一組庫和應用程序的Java 應用UNIX上更輕鬆地運行。 Jsvc允許應用程序 (例如Tomcat)以root身份執行某些特許操作(例如將 綁定到端口< 1024),然後將標識切換到非特權用戶。 它可以通過Cygwin仿真層在Win32上運行,但是Win32 用戶可能更喜歡使用procrun,它允許應用程序 作爲Windows服務運行。