我在linux服务器上运行了我的中间层jar文件。我希望那个jar文件在后台不停运行。
nohup java -jar RushMiddleLayer.jar &
但是当我重新运行这个命令时,另一个新的jar实例被创建并运行。
我通过谷歌搜索过。他们提出了一些选择。 "绑定ServerSocket"。但这对我不起作用。按Enter键或Ctrl + C后进程终止。
我想从jar中获得两个好处。一个人总是失败地跑步。另一个是使用相同的命令重启jar(nohup java -jar RushMiddleLayer.jar&)。 它应该替换现有的jar,而不是创建新的实例。
答案 0 :(得分:0)
为了确保我理解你想要的东西,你想要一个在后台运行的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,因此无法启动,因为只有一个进程可以拥有同时将句柄写入文件。