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

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 个其他参数需要 - 它们对于所有进程都是相同的

如果进程失败,并且 NodeNumber 参数相同,我需要能够重新启动该进程。换句话说 - 如果节点 3 失败,我需要将其作为节点 3 重新启动。

答案1

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

要达到您期望的效果,执行以下操作就足够了(未经测试,使用风险自负):

#!/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

每个进程必须以退出代码零结束才能中断循环。否则,脚本会重新启动它。

答案2

Juliano 的解决方案可能适用于简单情况,但并不涵盖所有情况。例如,如果错误处理代码中存在错误,即使发生错误,您的某个进程也可能以退出状态 0 退出。或者它可能会死锁或陷入某种无限循环而无法执行任何有用的操作。

所以如果你想要一个更好的解决方案,可以尝试纳吉奥斯.它允许你编写用于特殊监控任务的插件。

答案3

你可以随时使用守护进程工具监控并重新启动您的进程。

相关内容