2

Jetty 8 の tar.gz ディストリビューションに含まれている jetty.sh スクリプトが壊れているようです。

桟橋の起動は正常に機能しますが、実行後

sudo ./jetty.sh stop

まだ仕事がぶら下がっています。

その理由は、起動時に 2 つのプロセスが作成されるためです。1 つは jetty.sh によって作成された start.jar 用ですが、2 つ目のプロセスも作成されます。ただし、start.jar 起動の PID のみが記録されます。したがって、停止中は、jetty ランタイム プロセスのこの部分のみが停止します。

Stackoverflow にも同様の質問があります。たとえば、非常に単純なupstartスクリプトが提供されていますが、これも上記と同じ問題に苦しんでいます。

両方のプロセスが強制終了されるようにスクリプトを修正する方法を知っている人はいますか?

4

2 に答える 2

2

start.ini が「--exec」オプションを使用しているため、2 番目のプロセスが開始されます。

これは、bootclasspath の指定など、JVM への高度な変更が必要な構成の高度なオプションです。

ほとんどの人は、この機能を必要としません。

start.ini から「--exec」を削除するだけで、2 番目のプロセスが開始されなくなります。

于 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 に答える