2010-02-05 5 views
3

Java 응용 프로그램에 대한 두 가지 요구 사항이 있습니다. 종료되면 다시 시작하십시오. 서버가 재부팅되면 다시 시작하십시오. 대답을 사용하여 here 나는 자바 응용 프로그램이 죽으면 다시 시작 스크립트가 있습니다.부팅시 Java 프로세스 시작 및 종료시 자동 다시 시작

 
#!/bin/bash 

until java -Xms256m -Xmx768m -jar MyApp.jar; do 
    echo "MyApp crashed with exit code $?. Respawning... " >&2 
    sleep 5 
done 

나는 "nohup을의 restart_script.sh &"이것을 실행하고 문제없이 하루 종일 실행됩니다. 이제 시작 요구 사항에 대해. 나는 /etc/init.d/crond 스크립트를 가져 와서 스크립트와 crond 바이너리를 바꿨지 만 시작시 멈 춥니 다.

 
#!/bin/bash 
# 
# Init file for my application. 
# 
. /etc/init.d/functions 

MYAPP=restart_script.sh 
PID_FILE=/var/run/myapp.pid 

start(){ 
     echo -n "Starting My App" 
     daemon --user appuser $MYAPP 
     RETVAL=$? 
     echo 
     [ $RETVAL -eq 0 ] && touch /var/lock/subsys/myapp 
     return $RETVAL 
} 

stop(){ 
     echo -n "Stopping my application" 
     killproc $MYAPP 
     RETVAL=$? 
     echo 
     [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/myapp 
     return $RETVAL 
} 

... 

case "$1" in 
    start) 
     start 
     ;; 
    stop) 
     stop 
     ;; 
... 
esac 

/sbin/service myapp를 시작하면 스크립트가 시작되지만 콘솔이 중단됩니다. 나는 "daemon --user appuser nohup $ MYAPP &"을 시도했으며 즉시 [OK] 표시가 없으면 프롬프트로 돌아가고 ps를 수행 할 때 나는 여전히 init이 매달린 것을 보았다. init 스크립트 내에서 스크립트를 호출하고 올바르게 리턴하는 방법은?

감사합니다,

그렉

+0

http://superuser.com에 더 적합 할 수 있습니다. – danben

답변

5

내 컴퓨터 (오래된 RedHat)의 데몬 기능은 실행 된 프로그램이 반환 될 때까지 반환되지 않습니다. 그래서 당신은 당신의 작은 유틸리티 스크립트가 포크를 할 필요가있을 것입니다.

이처럼 유틸리티를 작성하십시오 :

#!/bin/bash 

(
    until java -Xms256m -Xmx768m -jar MyApp.jar; do 
     echo "MyApp crashed with exit code $?. Respawning... " >&2 
     sleep 5 
    done 
) & 

을이 작동 방법. 괄호 안에 명령을 넣으면 코드가 새 프로세스에서 실행됩니다. 백그라운드 프로세스에 프로세스를 넣으면 원래 프로세스가 기다리지 않고 리턴됩니다.

4

당신은 tanuki
내가 말하는 뜻 , 당신이, 바퀴를 재발견 할 필요가 없습니다 ... 여기에 아주 좋은 일이며, 자바 서비스 래퍼가 필요합니다 거기에 도구가 있습니다.

+0

이미 존재하는 솔루션을 사용하는 경우 +1 –

+0

죄송합니다. 호환되지 않는 라이센스를 사용할 수 없습니다. – GregB