我的中间层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。同时将句柄写入文件。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句