2010-04-27 70 views
6

儘管我發現這個問題在SW上得到了幾次回答,但我沒有找到最終答案,最好的方法是什麼。在Linux上對Java應用程序進行守護進程的最佳方式

我不打算使用任何外部包裝,因爲我發現他們啓動java進程下一個很好的水平低於自己,這可能會降低性能,所以它似乎只剩下了shell方法。

我迄今發現3種不同的外殼方法:

  • 啓動 - 停止 - 守護
  • RedHat的守護進程的init.d功能
  • 在啓動的nohup /認啓動後

什麼你正在使用的人,可以推薦爲最可靠的方法嗎?

謝謝。

+0

「你正在使用的是什麼」投票問題與SO – Raedwald 2013-10-21 16:45:07

+0

的主題無關「人們正在使用的是什麼」是一個話題,你很討厭你決定關閉一些事情,因爲它們是「基於觀點的」。諷刺不是? – Nazar 2016-09-08 15:16:21

回答

5

儘管對此的標準答案似乎是jsvc,但我一直在使用djb的daemon tools是將任何東西變爲守護進程的好方法。

我有java,python和幾個shell腳本作爲守護進程運行,用一個簡單的方法來啓動/停止它們,並且有很好的日誌記錄。

我以前用root運行daemontools作爲最初設計的initctl,但幾個月後我決定手動運行它,使用普通用戶,並使用svscan-start進行更好的日誌記錄。

-1

你可以嘗試使用screen(啓動屏幕,然後啓動Java程序,然後關閉[不退出]屏幕)

+0

不完全是一個可怕的建議,我爲某些事情做這件事。但是我認爲這與將守護進程運行的意圖相去甚遠。不過,謝謝你的建議。 – 2013-01-16 23:23:59

1

我也不能完全排除外部包裝。
我已經注意到一些使用Tanuki Wrapper http://wrapper.tanukisoftware.org/的備受推崇的軟件。

這增加了一個優點,即該程序也可以作爲一個Windows服務以一致的方式輕鬆運行。

+0

他不能在Linux上將其作爲Windows服務運行。 – danben 2010-04-27 20:41:11

+0

嗯,我真的沒有仔細觀察單聲道發展,但那不是重點。爲什麼限制應用程序僅在不必要的情況下在Linux上運行。也許其他人可能會發現需要運行該應用程序,並發現他們只能在Windows上運行。爲什麼不限制潛在用戶的使用限制並鼓勵他們重複使用呢? – crowne 2010-04-27 20:59:27

5

如果我想在後臺運行的守護進程的應用程序,我不喜歡這樣寫道:

nohup java -jar MyJar &

沒有什麼特別不可靠而已 - nohup防止它接收SIGHUP當您斷開連接,並且&在後臺運行進程。

或者,您可以將輸出重定向到nohup.out以外的其他東西。

2

我會使用RedHat守護進程init.d函數。這使您可以在服務器啓動時重新啓動應用程序。運行nohup不會處理服務器重新啓動等。

1

我在過去使用Akuma,並取得了巨大成功。事實上,它是一個Java庫真的讓事情變得更容易,嵌入功能是微不足道的。