2010-08-16 132 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