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,也遇到了上述相同的问题。
有没有人知道如何修复脚本以便两个进程都被杀死?
答案 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