Bash脚本杀死并重新启动Hudson

时间:2010-08-16 22:47:52

标签: bash hudson kill pid

我是Bash脚本的新手,但我学的很快。通常。我正在尝试编写一个脚本来杀死并重新启动Hudson的实例 - 需要重新启动才能获取环境变量的更改。到目前为止我所拥有的:

#!/bin/bash
h=`pgrep -f hudson`
if test "$h" != ""; then
  kill $h
  while [ "$h" != "" ]; do
    sleep 1
    unset h
    h=`pgrep -f hudson`
  done
fi
java -jar ~/hudson/hudson.war &

该脚本正确地确定了正在运行的Hudson实例的PID并将其杀死。但是,它只是在“kill”行之后等待并且不继续。如果我点击一个键就完成了杀死进程并退出脚本,甚至没有进入while循环。很明显,我错过了一些关于如何杀死这个过程的东西。并不是Hudson进程挂起而且没有响应“kill”;它会正常退出,直到我干预。

我也相信这可能会更有效率,但现在我只想了解我哪里出错了。

提前致谢。

3 个答案:

答案 0 :(得分:4)

这代表了对脚本的一些直接改进:

#!/bin/bash
h=$(pgrep -f hudson)    # $() is preferred over backticks
if [[ -n $h ]]; then    # this checks whether a variable is non-empty
  kill $h
  while [[ -n $h ]]; do
    sleep 1
    h=$(pgrep -f hudson)    # it's usually unnecessary to unset a variable before you set it
  done
fi
java -jar ~/hudson/hudson.war &

但是,这可能就是您所需要的(或者使用mrooney referred to提供的设施):

while pkill hudson; do sleep 1; done
java -jar ~/hudson/hudson.war &

答案 1 :(得分:2)

如何善待哈德森并让它自己关闭。我在Hudson forum中找到了以下声明:

  

我添加了http://server/hudson/exit   1.161。访问此URL将关闭运行Hudson的VM。

您可以使用wget调用URL。如果Hudson没有在适当的时间内关闭,你仍然可以杀死它。

编辑:我偶然发现了another thread,并提供了有趣的重启选项。它使用Winstone服务器中的构建命令。不确定它是否会获取环境变量的更改。

答案 2 :(得分:0)

如果您通过RPM使用Hudson,它已经附带了一个init脚本。如果没有,我会看看他们,看看你是否可以将他们的剧本作为他们的基础:https://hudson.dev.java.net/svn/hudson/trunk/hudson/main/rpm/SOURCES/(嘉宾//嘉宾)。

相关问题