ubuntu 防止运行多个jar示例

xpcnnkqh  于 2022-11-02  发布在  其他
关注(0)|答案(1)|浏览(181)

我有我的中间层jar文件运行在linux服务器上。我希望该jar文件在后台不间断运行。

nohup java -jar RushMiddleLayer.jar &

但是当我重新运行这个命令时,jar的另一个新示例创建并运行。
我在谷歌上搜索过。他们建议了一些选项。“绑定一个服务器套接字”。但是这对我来说不起作用。按回车键或Ctrl+C后进程被杀死。
我想从jar中得到两个好处。一个是总是运行失败。另一个是使用相同的命令(nohup java -jar RushMiddleLayer.jar &)重新启动jar。它应该替换现有的jar,而不是创建新的示例。

l5tcr1uw

l5tcr1uw1#

只是为了确保我明白你想要什么,你想要一个在后台运行的jar文件,它只能启动一次,一次?
如果这是您想要的,有两种方法可以实现:
1.使用端口作为信号量(如您所建议)
1.将文件用作信号量。
关于备选案文1,
代码应该像这样简单:

try {
    serverSocket = new ServerSocket(port);
} catch (IOException e) {
    System.out.println("Could not listen on port: " + port);
    // ...
}

如果您无法在这个连接埠上开启服务器通信端,将会掷回IOException。不过,如果其他应用程序正在使用这个连接埠,也会发生这种情况。所以请小心您选择的连接埠号码。
对于选项2,您只需使用FileWriter并创建一个虚拟文件,并保持此文件打开,直到jar/程序完成当试图打开jar的第二个示例时,会掷回例外状况,而且它会'无法启动,因为它将尝试打开文件进行写入,这会产生IOException,因为只有一个进程可以拥有文件的写句柄在同一时间。

相关问题