通过詹金斯
问题描述:
杀死特定端口上的所有进程,我想有杀死在端口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
任何想法如何解决这一问题?
答
也许詹金斯用户无法看到,因为特权的流程,这样的$(lsof ..)
扩建为空。
错误输出可能是不完整的,因为如果lsof的调用失败会有stderr中的消息。
答
尽量把命令与路径
/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)
答
的问题是,$是詹金斯命令的特殊字符。这意味着你指的是一个ENV VAR。
你应该尝试写包单引号的命令。
答
我哈特贾南同样的问题。当进程没有运行时,它不起作用。 bash
只是做了,但詹金斯失败了。
您可以添加|| true
你詹金斯的工作指示詹金斯如果bash命令失败,这项工作继续进行。
所以其:
fuser -k 5000/tcp || true