2017-06-21 112 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