Vários processos *quase* idênticos em um servidor Linux

Vários processos *quase* idênticos em um servidor Linux

Qual é a melhor maneira de executar vários processos Java quase idênticos no mesmo servidor Linux?

Explicação do meio ambiente:

Estamos executando um conjunto de processos Java que fornecem uma grade de cálculo. A única diferença entre os processos é o parâmetro da linha de comando que identifica o nome do nó. Algo como:

(Processo 1) Java -DNodeNumber=1 CalculationNode

(Processo 2) Java -DNodeNumber=2 CalculationNode

(Processo 3) Java -DNodeNumber=3 CalculationNode

(Processo 4) Java -DNodeNumber=4 CalculationNode

O script que inicia cada processo é relativamente simples, mas não trivial, pois existem cerca de 15 outros parâmetros necessários - SÃO IDÊNTICOS PARA TODOS OS PROCESSOS

Preciso poder reiniciar um processo se ele falhar com o parâmetro SAME NodeNumber. Em outras palavras - se o Nó 3 falhar, preciso reiniciá-lo como Nó 3.

Responder1

Eu diria que se um processo falhar, você precisará corrigi-lo para não falhar mais.

Para fazer o que você espera, algo assim seria suficiente (não testado, use por sua conta e risco):

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

Cada processo deve terminar com o código de saída zero para interromper o loop. Caso contrário, ele será reiniciado pelo script.

Responder2

A solução do Juliano pode funcionar em casos simples, mas não abrange todas as situações. Por exemplo, um dos seus processos pode sair com status de saída 0 mesmo que tenha ocorrido um erro, se houver um erro no código de tratamento de erros. Ou poderia travar ou entrar em algum outro tipo de loop infinito sem fazer nada de útil.

Então, se você quiser uma solução mais sofisticada, tenteNagios. Ele permite que você escreva plug-ins para tarefas especiais de monitoramento.

Responder3

Você sempre pode usarDaemon Toolspara monitorar e reiniciar seus processos.

informação relacionada