Múltiples procesos *casi* idénticos en un servidor Linux

Múltiples procesos *casi* idénticos en un servidor Linux

¿Cuál es la mejor manera de ejecutar múltiples procesos Java casi idénticos en el mismo servidor Linux?

Explicación del entorno:

Estamos ejecutando un conjunto de procesos Java que proporcionan una cuadrícula de cálculo. La única diferencia entre los procesos es el parámetro de la línea de comando que identifica el nombre del nodo. Algo como:

(Proceso 1) Java -DNodeNumber=1 CalculationNode

(Proceso 2) Java -DNodeNumber=2 CalculationNode

(Proceso 3) Java -DNodeNumber=3 CalculationNode

(Proceso 4) Java -DNodeNumber=4 CalculationNode

El script que inicia cada proceso es relativamente simple, pero no trivial, ya que se necesitan alrededor de 15 parámetros más. SON IDÉNTICOS PARA TODOS LOS PROCESOS

Necesito poder reiniciar un proceso si falla con el MISMO parámetro NodeNumber. En otras palabras, si el Nodo 3 falla, necesito reiniciarlo como Nodo 3.

Respuesta1

Yo diría que si un proceso falla, es necesario arreglarlo para que no vuelva a fallar.

Para hacer lo que esperas, algo como esto sería suficiente (no probado, úsalo bajo tu propia responsabilidad):

#!/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 proceso debe finalizar con el código de salida cero para poder romper el ciclo. De lo contrario, el script lo reinicia.

Respuesta2

La solución de Juliano podría funcionar en casos simples, pero no cubre todas las situaciones. Por ejemplo, uno de sus procesos podría salir con el estado de salida 0 aunque haya ocurrido un error, si hay un error en el código de manejo de errores. O podría bloquearse o encontrarse con algún otro tipo de bucle infinito sin hacer nada útil.

Así que si quieres una solución más sofisticada, pruebaNagios. Le permite escribir complementos para tareas de monitoreo especiales.

Respuesta3

Siempre puedes usarDaemon Toolspara monitorear y reiniciar sus procesos.

información relacionada