2012-05-29 4 views
2

부두 8의 tar.gz 배포본에 포함 된 jetty.sh 스크립트가 손상된 것 같습니다.부두가 Linux의 서비스 스크립트에 의해 중단되지 않음

시작 부두는 잘 작동하지만

sudo ./jetty.sh stop 

주위를 어슬렁 작업이 여전히 존재를 실행 한 후.

시작하는 동안 jetty.sh에 의해 생성 된 start.jar에 대한 프로세스와 두 번째 프로세스 인 두 개의 프로세스가 생성됩니다. 그러나 start.jar 시작의 PID 만 기록됩니다. 따라서 중지하는 동안 부두 런타임 프로세스의이 부분 만 중지됩니다.

Stackoverflow에 관한 비슷한 질문이 있습니다. 예를 들어, in a very simple upstart script is provided도 위에서 설명한 것과 동일한 문제를 겪고 있습니다.

두 사람 모두 프로세스가 종료되도록 스크립트를 수정하는 방법을 알고있는 사람이 있습니까?

답변

2

start.ini가 "--exec"옵션을 사용하기 때문에 두 번째 프로세스가 시작됩니다.

이것은 bootclasspath 지정과 같이 JVM에 대한 고급 변경이 필요한 구성의 고급 옵션입니다.

대부분의 사람들은이 기능이 필요하지 않습니다.

start.ini에서 "--exec"를 제거하면 두 번째 프로세스가 시작되지 않습니다.

0

모든 하위 프로세스를 수동으로 수동으로 종료하여 스크립트를 수정했습니다. 차이점은 다음과 같습니다.

--- /etc/init.d/jetty 2012-05-29 12:59:09.439511236 +0200 
+++ jetty.sh 2012-05-29 12:58:13.615513127 +0200 @@ -461,11 +461,23 @@ 
    stop) 
    echo -n "Stopping Jetty: " 
    if type start-stop-daemon > /dev/null 2>&1; then 
     echo $JETTY_PID 

+  # FIXME: start-stop-daemon isn't killing child process 
+  JETTY_PID_NO=`cat "$JETTY_PID"` 
+  for child_pid in `ps -o pid --no-headers --ppid $JETTY_PID_NO` 
+  do 
+  kill -HUP $child_pid 
+  done 
     start-stop-daemon -K -p"$JETTY_PID" -d"$JETTY_HOME" -a "$JAVA" -s HUP 

     TIMEOUT=30 
     while running "$JETTY_PID"; do 
     if ((TIMEOUT-- == 0)); then 
+   for child_pid in `ps -o pid --no-headers --ppid $JETTY_PID_NO` 
+   do 
+   kill -KILL $child_pid 
+   done 
      start-stop-daemon -K -p"$JETTY_PID" -d"$JETTY_HOME" -a "$JAVA" -s KILL 
     fi 
관련 문제