我有一个运行着多个线程的应用程序。它们中的每一个都包裹着一个 cath(Throwable ),如果发生意外情况我可以使用它。在 Ubuntu/Linux 下重新启动应用程序本身的最佳方法是什么。 我找到了这个项目“Java Service Wrapper”,有什么经验吗?
我尝试了 -XX:OnError 选项,但它似乎不起作用(Java(TM) SE Runtime Environment (build 1.6.0_16-b01) )
最佳答案
您能否从一个批处理文件(循环)启动它并让它使用 System.exit(1)?
如果是这样,您可以在批处理文件中测试错误级别,如果为 1,则返回并重新启动程序,但如果为零,则退出批处理文件。
编辑: 您是否希望在外部触发“重置”(从 unix?)
如果是这样,我的建议是:
- 创建一个名为 -restart 的命令行选项
- 在没有命令行的情况下运行时,在预设的高端口(32123?)上打开一个套接字,并在启动您的应用程序时监听连接。
- 当您通过传递给它的一些关键字符串建立连接时,执行 System.exit(1);
- 当使用 -restart 运行时,而不是正常启动时连接到该端口并发送正确的 key 字符串并退出。
- 如果您的重启例程无法连接,请务必打印一条错误消息,说明守护进程未运行。
还有其他方法可以将消息发送到现有进程,但套接字可能是最简单的——只需几行代码。另一个是在某个绝对位置轮询文件是否存在,还有找到 PID 并杀死它。
套接字作为独立于平台的附加优势。
关于java - 在 Ubuntu 下以编程方式 self 重启 Java 应用程序的最佳方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1948115/