Shell Jenkins通过ssh终止进程的作业(Tomcat)

Shell Jenkins通过ssh终止进程的作业(Tomcat),shell,jenkins,kill,exit-code,Shell,Jenkins,Kill,Exit Code,我正在使用Jenkins作业运行几个简单的shell命令(通过ssh,通过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 /op

我正在使用Jenkins作业运行几个简单的shell命令(通过ssh,通过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吗?我试过几种变体,但都没有成功


谢谢

您应该检查
ps xu
的输出。由于
kill
将按顺序终止进程,因此,如果有多个
tomcat
进程由
ps xu
生成,则其他进程将在第一个进程终止后自动终止。然后,
kill
尝试终止不再存在的进程。

我怀疑Jenkins不喜欢kill命令打印的没有运行的
no process killed
。尝试将标准输出重定向到/dev/null

这些问题有点老了,但当我偶然发现时,这里有另一个建议

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}
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

你能不能只运行
pkill-tomcat

应该只有一个tomcat进程在运行,如果手动运行,命令本身工作正常(并以0而不是-1退出)。此外,我还向xargs添加了-r选项,以确保命令在没有输入的情况下不会运行;仍然获得相同的:[SSH]退出状态:-1