Несколько *почти* идентичных процессов на сервере Linux

Несколько *почти* идентичных процессов на сервере Linux

Каков наилучший способ запустить несколько почти идентичных процессов Java на одном сервере Linux?

Объяснение окружающей среды:

Мы запускаем набор процессов Java, которые предоставляют сетку вычислений. Единственное различие между процессами — параметр командной строки, который определяет имя узла. Что-то вроде:

(Процесс 1) Java -DNodeNumber=1 УзелВычисления

(Процесс 2) Java -DNodeNumber=2 УзелВычисления

(Процесс 3) Java -DNodeNumber=3 УзелВычисления

(Процесс 4) Java -DNodeNumber=4 УзелВычисления

Скрипт, который запускает каждый процесс, относительно прост, но не тривиален, поскольку требуется около 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

Решение Джулиано может работать в простых случаях, но оно не охватывает все ситуации. Например, один из ваших процессов может завершиться с кодом завершения 0, даже если произошла ошибка, если в коде обработки ошибок есть ошибка. Или он может заблокироваться или попасть в какой-то другой бесконечный цикл, не сделав ничего полезного.

Так что если вам нужно более необычное решение, попробуйтеНагиос. Позволяет писать плагины для специальных задач мониторинга.

решение3

Вы всегда можете использоватьDAEMON Toolsдля мониторинга и перезапуска ваших процессов.

Связанный контент