java - 在 Ubuntu 下以编程方式 self 重启 Java 应用程序的最佳方法是什么

标签 java crash restart

我有一个运行着多个线程的应用程序。它们中的每一个都包裹着一个 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?)

如果是这样,我的建议是:

  1. 创建一个名为 -restart 的命令行选项
  2. 在没有命令行的情况下运行时,在预设的高端口(32123?)上打开一个套接字,并在启动您的应用程序时监听连接。
  3. 当您通过传递给它的一些关键字符串建立连接时,执行 System.exit(1);
  4. 当使用 -restart 运行时,而不是正常启动时连接到该端口并发送正确的 key 字符串并退出。
  5. 如果您的重启例程无法连接,请务必打印一条错误消息,说明守护进程未运行。

还有其他方法可以将消息发送到现有进程,但套接字可能是最简单的——只需几行代码。另一个是在某个绝对位置轮询文件是否存在,还有找到 PID 并杀死它。

套接字作为独立于平台的附加优势。

关于java - 在 Ubuntu 下以编程方式 self 重启 Java 应用程序的最佳方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1948115/

相关文章:

linux - Android 模拟器在 Ubuntu Maverick 上不断重启

c++ - 服务重启后套接字未释放

Java - 如何拆分以下字符串以获得我需要的信息?

java - 日历功能

iphone - iOS在调用方法之前检查委托(delegate)是否存在

MySQL 启动时崩溃

linux - 我的 VPS 每小时重启一次

Java servlet 用于计算还是仅用于控制?

java - 对象反射的安全风险是什么?

crash - 创建新解决方案时,MonoDevelop崩溃