1

我有一个运行多个线程的应用程序。它们每个都用一个 cath(Throwable) 包裹,如果发生意外情况,我可以使用它。在 Ubuntu/Linux 下重新启动应用程序本身的最佳方法是什么。我找到了这个项目“ Java Service Wrapper ”,有经验吗?

我尝试了 -XX:OnError 选项,但它似乎不起作用(Java(TM) SE Runtime Environment (build 1.6.0_16-b01))

4

2 回答 2

4

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

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

编辑:您是否希望从外部触发“重置”(来自 unix?)

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

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

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

套接字作为独立于平台的额外优势。

于 2009-12-22T18:04:08.000 回答
0

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

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

于 2009-12-23T08:09:35.747 回答