2009-12-22 90 views
1

我有一个运行多个线程的应用程序。他们每个人都包裹一个cath(Throwable),我可以使用,如果意想不到的事情发生。在Ubuntu/Linux下重启应用程序本身的最佳方式是什么? 我发现这个项目“Java Service Wrapper”,有什么经验吗?什么是在Ubuntu下以编程方式自动重启Java应用程序的最佳方式

我试过-XX:的OnError选项,但它似乎并不工作(的Java(TM)SE运行时环境(建立1.6.0_16-B01))

+0

需要考虑的事情是在出现问题时重新启动线程。 Java通过AWT线程自动执行此操作。 – 2009-12-22 18:22:20

+0

顺便说一句,它是如何'包裹'在尝试赶上? 是包装在try/catch中的.start(),还是整个run()方法? – Bozho 2009-12-22 18:22:56

+0

运行方法被包装(正在运行的线程) – 2009-12-22 18:58:27

回答

4

你能不能从一个批处理文件启动(循环),并使用System.exit(1)?

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

编辑: 你希望触发“复位”外部

如果是的话,我的建议是如下(从UNIX?):

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

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

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

0

您必须设计一种机制来处理您的许多线程,捕获问题并确定是否可以从Java内部重新启动发生故障的线程

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

+0

除了如果你想发送套接字消息给应用程序让它自己重新启动。那么也许你会认为我认为这可能是好的? – 2010-06-30 19:59:25

相关问题