![](/img/trans.png)
[英]Java. Prevent Jar App from multiple running with pop up message “already running”. (using ServerSocket())
[英]Prevent multiple instance of jar running
我的中間層jar文件在linux服務器上運行。 我希望該jar文件在后台不間斷運行。
nohup java -jar RushMiddleLayer.jar &
但是,當我重新運行該命令時,創建並運行了jar的另一個新實例。
我已經通過谷歌搜索。 他們提出了一些選擇。 “綁定ServerSocket”。 但這對我不起作用。 按Enter或Ctrl + C后,進程終止。
我想從罐子中獲得兩個好處。 一個總是以失敗告終。 如果使用相同命令重新啟動jar,則使用另一個命令(nohup java -jar RushMiddleLayer.jar&)。 它應該替換現有的jar,而不是創建新的實例。
只是為了確保我了解您想要什么,您想要一個在后台運行的jar文件,並且只能一次啟動一次?
如果這是您想要的,有兩種方法可以實現:
對於選項1
代碼應該像下面這樣簡單:
try {
serverSocket = new ServerSocket(port);
} catch (IOException e) {
System.out.println("Could not listen on port: " + port);
// ...
}
如果無法在此端口上打開服務器套接字,則將引發IOException 。 但是,如果某些其他應用程序正在使用此端口,也會發生這種情況。 因此,請小心選擇哪個端口號。
對於選項2,您只需使用FileWriter並創建一個虛擬文件,並將此文件保持打開狀態,直到jar /程序完成(或關閉)。 當jar的第二個實例嘗試打開時,將引發異常,並且將無法啟動,因為它會嘗試打開要寫入的文件,從而產生IOException,因為只有一個進程可以擁有一個IOException。同時將句柄寫入文件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.