Linux 서버의 여러 *거의* 동일한 프로세스

Linux 서버의 여러 *거의* 동일한 프로세스

동일한 Linux 서버에서 거의 동일한 여러 Java 프로세스를 실행하는 가장 좋은 방법은 무엇입니까?

환경 설명:

우리는 계산 그리드를 제공하는 일련의 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으로 다시 시작해야 합니다.

답변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

루프를 중단하려면 각 프로세스가 종료 코드 0으로 완료되어야 합니다. 그렇지 않으면 스크립트에 의해 다시 시작됩니다.

답변2

Juliano의 솔루션은 간단한 경우에 작동할 수 있지만 모든 상황을 다룰 수는 없습니다. 예를 들어 오류 처리 코드에 오류가 있는 경우 오류가 발생하더라도 프로세스 중 하나가 종료 상태 0으로 종료될 수 있습니다. 또는 유용한 작업을 수행하지 않고 교착 상태에 빠지거나 다른 종류의 무한 루프에 빠질 수 있습니다.

따라서 더 멋진 솔루션을 원한다면 시도해보십시오.나기오스. 특별한 모니터링 작업을 위한 플러그인을 작성할 수 있습니다.

답변3

당신은 항상 사용할 수 있습니다데몬툴즈프로세스를 모니터링하고 다시 시작합니다.

관련 정보