1

我正在使用 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

知道为什么命令的退出代码为 -1 吗?我已经尝试了几种变体,但没有任何运气。

谢谢。

4

4 回答 4

1

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

于 2013-01-05T01:33:17.903 回答
1

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

于 2013-01-05T19:45:00.597 回答
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

于 2015-12-20T10:01:34.023 回答
0

你能做到pkill tomcat吗?

于 2018-05-25T13:10:52.637 回答