2

Jetty 8 的 tar.gz 发行版中包含的 jetty.sh 脚本似乎已损坏。

启动码头工作正常,但执行后

sudo ./jetty.sh stop

还有一份工作。

原因是在启动过程中创建了两个进程,一个是由 jetty.sh 创建的 start.jar,还有一个。但是只记录了start.jar启动的PID。因此,在停止期间,只有这部分码头运行时进程被停止。

Stackoverflow 上有类似的问题。例如,在一个非常简单的 upstart 脚本中提供了,它也遇到了上述相同的问题。

有谁知道如何修复脚本以便两个进程都被杀死?

4

2 回答 2

2

第二个进程已启动,因为您的 start.ini 正在使用“--exec”选项。

对于需要对 JVM 进行高级更改(例如指定引导类路径)的配置,这是一个高级选项。

大多数人不需要这个功能。

只需从 start.ini 中删除“--exec”即可阻止第二个进程启动。

于 2012-05-30T16:33:05.210 回答
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
于 2012-05-29T11:02:02.100 回答