我是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”;它会正常退出,直到我干预。
我也相信这可能会更有效率,但现在我只想了解我哪里出错了。
提前致谢。
答案 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/(嘉宾//嘉宾)。