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

时间:2009-12-22 18:02:03

标签: java crash restart

我有一个运行多个线程的应用程序。它们中的每一个都包含一个导管(Throwable),如果出现意外情况,我可以使用它。在Ubuntu / Linux下重启应用程序本身的最佳方法是什么。 我发现这个项目“Java Service Wrapper”,有任何经验吗?

我尝试了-XX:OnError选项,但它似乎不起作用(Java(TM)SE运行时环境(版本1.6.0_16-b01))

2 个答案:

答案 0 :(得分:4)

你能从批处理文件(循环)启动它并让它使用System.exit(1)吗?

如果是这样,您可以测试批处理文件中的错误级别,如果它是1,则循环返回并重新启动程序,但如果它为零,则退出批处理文件。

编辑: 你想在外部触发“重置”(来自unix?)

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

  1. 创建名为-restart
  2. 的命令行选项
  3. 在没有命令行的情况下运行时,在预设的高端口(32123?)上打开一个套接字,并在启动应用程序时监听连接。
  4. 当您获得与传入其中的某个键字符串的连接时,请执行System.exit(1);
  5. 使用-restart运行时,不是正常启动,而是连接到该端口并发送正确的密钥字符串并退出。
  6. 如果您的重启例程无法连接,请务必打印一条错误消息,说明该守护程序未运行。
  7. 还有其他方法可以将消息发送到现有进程,但套接字可能是最简单的 - 它只是几行代码。另一个是轮询某个绝对位置存在一个文件,并且还找到了PID并将其删除。

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

答案 1 :(得分:0)

您必须设计一种机制来处理多个线程,捕获问题并确定是否可以从Java 中重新启动失败的线程

操作系统唯一重要的地方是您的应用程序是否完全退出并需要重新启动。只要您运行了某些部分应用程序,就不应该考虑这一点。