2017-06-21 117 views
0

殺死特定端口上的所有進程,我想有殺死在端口5000(bash)的所有進程詹金斯工作。 最簡單的辦法通過詹金斯

fuser -k 5000/tcp 

當我在終端執行該命令,但在詹金斯(「執行殼」)的標記建立作爲故障工作正常。

我也曾嘗試

kill $(lsof -i -t:5000) 

但同樣的,因爲它的工作原理普通終端上,在詹金斯我得到

kill: usage: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec] 
Build step 'Execute shell' marked build as failure 

任何想法如何解決這一問題?

回答

0

也許詹金斯用戶無法看到,因爲特權的流程,這樣的$(lsof ..)擴建爲空。

錯誤輸出可能是不完整的,因爲如果lsof的調用失敗會有stderr中的消息。

0

儘量把命令與路徑

/usr/bin/kill $(/usr/sbin/lsof -i -t:5000) 

如果運行詹金斯服務的用戶是不一樣的在端口5000的過程中,你將不能夠殺死該進程的用戶。也許你需要用sudo來運行這個。

試試這個

su -s jenkins #Or the user who run jenkins 
/usr/bin/kill $(/usr/sbin/lsof -i -t:5000) 
0

的問題是,$是詹金斯命令的特殊字符。這意味着你指的是一個ENV VAR。

你應該嘗試寫包單引號的命令。

0

我哈特賈南同樣的問題。當進程沒有運行時,它不起作用。 bash只是做了,但詹金斯失敗了。

您可以添加|| true你詹金斯的工作指示詹金斯如果bash命令失敗,這項工作繼續進行。

所以其:

fuser -k 5000/tcp || true 

也看到don't fail jenkins build if execute shell fails