2014-04-10 19 views
2

我有一個無頭Java應用程序,永久運行在後臺,就像服務/守護進程,我想。它運行在Linux上並收集數據,並將其存儲在數據庫中,並連續循環。簡單的發送/接收接口到後臺Java服務應用程序

它以init.d腳本啓動並停止。它在系統啓動時啓動在後臺運行的jar,並通過在系統關閉時關閉特定java進程來停止它。另外,我可以訪問此腳本來手動啓動/停止,就像這樣:

sudo service my-java-app stop 

儘管是原始的,這已經足夠了。但現在我希望使用更優雅的界面。這將允許我發送命令(即改變數據獲取頻率和友好終止)以及請求數據(即健康檢查和統計)。

我從來沒有這樣做過,我正在尋找一些指導從哪裏開始。該應用在無頭Linux上運行在後臺,因此GUI不適用。我曾經想過運行一個http服務器並監聽POST和GET,但這並不容易在bash中實現或使用。我以爲可能有一個虛擬的COM端口或我可以創建的東西?或甚至我寫入的文本文件和應用程序讀取間隔?

我形象的最終目標將是一個方法來執行在bash中的命令,並有Java應用程序監聽/附加到這個莫名其妙。

+0

netcat怎麼樣?你可以發送任何東西並用簡單的腳本包裝起來,這很容易 – rpax

+0

我認爲這取決於你想如何發出請求:使用HTTP GET/POST似乎是正確的,如果你想從其他計算機/設備訪問,只是使用瀏覽器。你可以使用'curl'從命令行訪問。但是,如果你不想遠程訪問也許這是過度殺傷 –

+0

@rpax netcat是一個Linux程序嗎?你是否建議我用ProcessBuilder或類似的東西包裝這個?我假設我會在bash中運行netcat命令來建立通信。 – Darian

回答

2

我曾經在Java代碼中使用套接字完成過一次。 Java應用程序作爲客戶端或守護進程運行。 main()入口點檢查套接字是否打開以知道守護進程是否已經運行。如果要啓動守護程序或發送命令,可以使用CLI參數來表示。

  • 上守護啓動,打開另一個發射的特定端口
  • 的插座上,你檢查的套接字是特定的端口開放,並且將消息發送到它,如果它是。

注意:這意味着選擇一個固定的端口,我不喜歡順便說一句。

+0

這可能是一個很好的解決方案,但如果您有時間,我有幾個初學者問題:is'sockets'是Java專有的嗎?另一個外部應用程序可以與此交談嗎數據傳輸的協議或格式是什麼?我想象的是一個簡潔的Java控制檯客戶端,但如果它可以通過bash腳本或其他應用程序訪問,它會更好。 – Darian

+0

@Darian套接字不是特定於Java的,它是一種執行IPC的方式。如果Java守護進程通過套接字偵聽遠程命令,則可以從我認爲的任何接口發送命令。我並不完全瞭解這一點,但你可以在互聯網上找到許多關於套接字的知識。 – Joffrey

+0

@Darian順便說一下,在我的舊程序中,我實際上通過命令行發送了命令。 Java不需要用戶界面;) – Joffrey

相關問題