2010-08-16 49 views
2

我是Bash脚本编程的新手,但我是一名快速学习者。通常。我试图编写一个脚本来终止并重新启动Hudson的一个实例 - 它需要重新启动以获取环境变量中的更改。我有什么至今: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 & 

脚本正常地判定运行哈德森实例的PID,并杀死它。但是,它只是在“杀”行后等待,不会继续。如果我点击一个键,它会完成查杀过程并退出脚本,甚至不会进入while循环。很明显,我错过了应该如何杀死这个过程。这并不是说哈德逊过程被挂起,也没有对“杀”作出反应;它会正常退出,直到我介入。

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

在此先感谢。

回答

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 & 
+0

感谢bash提示和明显更好的重构。 – AndrewRich 2010-08-18 19:09:07

2

如何被对哈德森很好,让它关闭。我发现下面的语句在Hudson forum

我加http://server/hudson/exit到 1.161。访问该URL将关闭运行Hudson的虚拟机。

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

编辑:我只是偶然发现another thread,有趣的重新启动选项。它使用Winstone服务器中的构建命令。不知道它是否会接受对环境变量的更改。

+0

感谢您的额外信息。这将是有用的。 – AndrewRich 2010-08-18 19:08:39