2013-01-04 173 views
1

我使用Jenkins作業來運行幾個簡單的shell命令(通過ssh,通過Jenkins SSH Plugin);這些命令都應該關閉正在運行的Tomcat服務器:Jenkins通過ssh殺死進程(Tomcat)

sudo /opt/tomcat/bin/catalina.sh stop 
ps xu | awk '/[t]omcat/{print $2}' | xargs -r kill -9 

的作業執行罰款,不終止Tomcat的,但不幸的是它也將失敗;完整的輸出是:

[SSH] executing pre build script: 

sudo /opt/tomcat/bin/catalina.sh stop 
ps xu | awk '/[t]omcat/{print $2}' | xargs kill -9 
[SSH] exit-status: -1 
Finished: FAILURE 

任何想法爲什麼命令的退出代碼if -1?我已經嘗試了幾個變化,沒有任何運氣。

謝謝。

回答

1

您應該檢查ps xu的輸出。由於kill會依次終止進程,因此可能會出現如果ps xu產生多個進程tomcat,其他進程將在第一個進程終止後自動終止的情況。然後kill嘗試終止不再存在的進程。

+0

應該只有一個單一的Tomcat進程正在運行,並命令本身工作正常(和退出時0,而不是-1),如果它是由手跑了。另外,我向xargs添加了-r選項,以確保該命令在沒有輸入的情況下不會運行。 – Eugen

1

我懷疑Jenkins不喜歡kill命令打印的no process killed不運行。嘗試將stdout重定向到/ dev/null。

+0

我將命令改爲ps xu | awk'/ [t] omcat/{print $ 2}'| xargs -r kill -9 1>/dev/null 2>/dev/null;仍然相同:[SSH]退出狀態:-1 – Eugen

1

這個問題有點舊,但是當我偶然發現時,這裏有另一個建議。

ps xu | awk '/[t]omcat/{print $2}' 

返回運行Tomcat和awk的過程本身,看到這裏

<user>  2370 0.0 0.0 26144 1440 pts/7 R+ 10:51 0:00 awk /[t]omcat/{print $2} 

awk的過程瞬間結束自己在其上運行xargs的之前,所以xargs的一個有一個退出代碼不等於0。

嘗試運行killall tomcat

+0

這是正確的答案。 – salvador