Назад | Перейти на главную страницу

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

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

Объяснение окружения:

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

(Процесс 1) Java -DNodeNumber = 1 CalculationNode

(Процесс 2) Java -DNodeNumber = 2 CalculationNode

(Процесс 3) Java -DNodeNumber = 3 CalculationNode

(Процесс 4) Java -DNodeNumber = 4 CalculationNode

Сценарий, запускающий каждый процесс, относительно прост, но не тривиален, так как требуется около 15 других параметров - ОНИ ИДЕНТИЧНЫ ДЛЯ ВСЕХ ПРОЦЕССОВ

Мне нужно иметь возможность перезапустить процесс, если он не работает с параметром SAME NodeNumber. Другими словами - если узел 3 выходит из строя, мне нужно перезапустить его как узел 3.

Я бы сказал, что если процесс не работает, вам нужно исправить это, чтобы больше не сбой.

Чтобы сделать то, что вы ожидаете, будет достаточно чего-то вроде этого (не проверено, используйте на свой страх и риск):

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

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

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

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

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