Несколько * Почти * идентичных процессов на сервере 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.

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

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

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

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

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

Другие вопросы по тегам