我使用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吗?我已经尝试了几个变种,但没有任何运气。
谢谢。
发布于 2013-01-05 09:33:18
您应该检查ps xu的输出。由于kill将按顺序杀死进程,因此如果ps xu产生了多个tomcat进程,则其他进程将在第一个进程终止后自动终止。然后,kill尝试终止不再存在的进程。
发布于 2013-01-06 03:45:01
我怀疑Jenkins不喜欢kill命令打印的不能运行的no process killed。尝试将stdout重定向到/dev/null。
发布于 2015-12-20 18:01:34
这些问题有点陈旧,但当我偶然发现这一点时,这里有另一个建议。
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
https://stackoverflow.com/questions/14166240
复制相似问题