在同一 Linux 服务器上运行多个几乎相同的 Java 进程的最佳方法是什么?
环境说明:
我们正在运行一组提供计算网格的 Java 进程。进程之间的唯一区别是标识节点名称的命令行参数。就像是:
(过程一) Java -DNodeNumber=1 CalculationNode
(过程2) Java -DNodeNumber=2 CalculationNode
(过程3) Java -DNodeNumber=3 CalculationNode
(过程4) Java -DNodeNumber=4 CalculationNode
启动每个进程的脚本相对简单,但并非微不足道,因为需要大约 15 个其他参数 - 它们对所有进程都是相同的
如果使用 SAME NodeNumber 参数失败,我需要能够重新启动进程。换句话说 - 如果节点 3 失败,我需要将它作为节点 3 重新启动。
我认为如果一个过程失败了,你需要修复它才能不再失败。
要做到你所期望的,这样的事情就足够了(未经测试,使用风险自负):
每个进程都必须以退出代码零结束才能中断循环。否则,它将由脚本重新启动。
Juliano 的解决方案可能适用于简单的情况,但并不能涵盖所有情况。例如,如果错误处理代码中有错误,即使发生错误,您的进程之一也可能以退出状态 0 退出。或者它可能会死锁或陷入某种其他类型的无限循环而没有做任何有用的事情。
因此,如果您想要更高级的解决方案,请尝试Nagios。它允许您为特殊监控任务编写插件。
您始终可以使用daemontools来监视和重新启动您的进程。