使用ANT脚本杀死进程

时间:2013-11-19 17:31:31

标签: unix ant awk

我正在尝试使用以下ant脚本

来终止进程
<target name="stopappserver">
    <sshexec host="servername"
        username="User"
        password="password"
        command="/local/jboss/hmcs-apps/jboss/bin/stop_hmcs-apps-2.sh"/>
</target>

stop_hmcs-apps-2.sh包含以下代码行

ps -edf |grep `ps -edf |grep hmcs-apps|grep -v grep |awk '{print $2}'` |grep -v hmcs-apps |awk '{print $2}' |xargs kill -9

当我运行ant脚本时,我得到以下输出,并且该过程仍在运行。当我直接从服务器运行脚本stop_hmcs-apps-2.sh时,它运行正常。

stopappserver:
[sshexec]    Connecting to WDCDVUA43.hmco.com:22
[sshexec]    cmd : /local/jboss/hmcs-apps/jboss/bin/stop_hmcs-apps-2.sh
[sshexec]    grep: can't open 6503
[sshexec]    grep: can't open 14217
[sshexec]    grep: can't open 6501
BUILD SUCCESSFUL

如何解决此问题,以便我可以使用我的ant脚本

来终止进程

1 个答案:

答案 0 :(得分:2)

让我们从清理这一行开始:

ps -edf |grep `ps -edf |grep hmcs-apps|grep -v grep |awk '{print $2}'` |grep -v hmcs-apps |awk '{print $2}' |xargs kill -9

此:

ps -edf |grep hmcs-apps|grep -v grep |awk '{print $2}'

可以更简洁地写成:

ps -edf |awk '/hmcs-apps/ && !/grep/{print $2}'

和此:

ps -edf |grep `whatever` |grep -v hmcs-apps |awk '{print $2}' |xargs kill -9

可以减少删除一些管道:

ps -edf |awk -v x=$(whatever) '($0~x) && !/hmcs-apps/{print $2}' |xargs kill -9

所以那么你的整行可以写成几个更少的管道:

ps -edf |awk -v x=$(ps -edf |awk '/hmcs-apps/ && !/grep/{print $2}') '($0~x) && !/hmcs-apps/{print $2}' |xargs kill -9

所以现在唯一剩下的问题是 - 它打算做什么?

调用ps -edf两次并解析它的输出一次用作grep regexp再次解析它的输出然后从输出中排除一些字符串....它有点混乱。

告诉我们它的意图(使用ps -edf的一些示例输入),我们可以告诉你如何编写它。