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

ループを中断するには、各プロセスが終了コード 0 で終了する必要があります。それ以外の場合は、スクリプトによって再起動されます。

答え2

Juliano の解決策は単純なケースでは機能するかもしれませんが、あらゆる状況に対応できるわけではありません。たとえば、エラー処理コードにエラーがある場合、エラーが発生しても、プロセスの 1 つが終了ステータス 0 で終了する可能性があります。または、デッドロックが発生したり、何も実行せずに他の種類の無限ループに陥ったりする可能性があります。

もっと凝った解決策が欲しいなら、ナギオス特別な監視タスク用のプラグインを作成できます。

答え3

いつでも使えるデーモンツールプロセスを監視および再起動します。

関連情報