Jetty没有被Linux上的服务脚本拦截

时间:2012-05-29 09:15:57

标签: linux jetty

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

启动jetty工作正常,但执行

sudo ./jetty.sh stop

还有一份工作。

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

Stackoverflow上有类似的问题。例如,in a very simple upstart script is provided,也遇到了上述相同的问题。

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

2 个答案:

答案 0 :(得分:2)

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

这是需要对JVM进行高级更改的配置的高级选项,例如指定bootclasspath。

大多数人不需要此功能。

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

答案 1 :(得分: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