在Linux服务器上多个*几乎相同的进程

在同一台Linux服务器上运行多个几乎完全相同的Java进程的最佳方式是什么?

环境说明:

我们正在运行一组提供计算网格的Java进程。 进程之间的唯一区别是标识节点名称的命令行参数。 就像是:

(进程1)Java -DNodeNumber = 1 CalculationNode

(进程2)Java -DNodeNumber = 2 CalculationNode

(进程3)Java -DNodeNumber = 3 CalculationNode

(过程4)Java -DNodeNumber = 4 CalculationNode

启动每个进程的脚本相对简单,但不是微不足道的,因为大约需要15个其他参数 – 它们对于所有进程是相同的

如果使用SAME NodeNumber参数失败,我需要能够重新启动一个进程。 换句话说 – 如果节点3发生故障,我需要重启节点3。

我认为,如果一个进程失败了,你需要修复它,以不再失败。

做你所期望的事情,像这样的事情就足够了(未经testing,使用风险自负):

#!/bin/bash for i in $(seq 1 4) do ( echo "Starting node $i..." while ! java -DNodeNumber=$i CalculationNode do sleep 1 echo "Restarting node $i..." done ) & done wait 

每个过程必须完成退出代码为零,以打破循环。 否则,由脚本重新启动。

朱里亚诺的解决scheme可能在简单的情况下工作,但并不能涵盖所有情况。 例如,如果error handling代码中存在错误,则即使发生了错误,您的某个进程也可能以退出状态0退出。 或者它可能会陷入僵局,或者在没有做任何有用的事情的情况下陷入其他某种无限循环。

所以如果你想要一个更好的解决scheme,试试Nagios 。 它允许你编写特殊监控任务的插件。

您始终可以使用daemontools来监视和重新启动您的进程。