2013-01-04 130 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