首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >命令内的Linux命令

命令内的Linux命令
EN

Stack Overflow用户
提问于 2013-10-18 04:40:43
回答 2查看 386关注 0票数 0

我的用例是远程在多台服务器上运行一个命令。我在主人之间建立了信任。

我有一个这样的命令:命令1:

代码语言:javascript
复制
for i in 11 12 13 14 15 16; do echo host-name-dev-$i; ssh -q host-name-dev-$i "nohup bash -c 'Place Ur command Here' > foo.out 2> foo.err < /dev/null &"; done

另一个命令是:命令2:

代码语言:javascript
复制
rm -rf /floderPath

当我将这两个命令(命令1+命令2)组合在一起时,它可以正常工作,随后的文件夹将从所有主机中删除。

代码语言:javascript
复制
for i in 11 12 13 14 15 16; do echo host-name-dev-$i; ssh -q host-name-dev-$i "nohup bash -c 'rm -rf /floderPath' > foo.out 2> foo.err < /dev/null &";done

现在我有了另一个命令。如果我单独在所有主机上运行这个命令,它可以正常工作,并杀死所有的java进程。命令3:

代码语言:javascript
复制
for i in `ps -ef | grep -v grep | grep java | awk '{print $2}'`; do kill -9 $i; echo "Process id $i is killed"; done

但是现在,当我将命令1和命令3组合在一起时,它根本不起作用。我在这里要做的是杀死所有主机上的所有JAVA进程。

代码语言:javascript
复制
for i in 11 12 13 14 15 16; do echo host-name-dev-$i; ssh -q host-name-dev-$i "nohup bash -c 'for j in `ps -ef | grep -v grep | grep java | awk '{print $2}'`; do kill -9 $j; echo "Process id $j is killed"; done' > foo.out 2> foo.err < /dev/null &";done

我可以猜到引号的使用可能不恰当,但我尝试过各种组合,但对我来说没有用。我没有太多的脚本编写经验,所以请原谅明显的错误。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-10-18 05:01:27

我认为下面的引文应该有效..。

代码语言:javascript
复制
for i in 11 12 13 14 15 16; do
  echo host-name-dev-$i
  ssh -q host-name-dev-$i "nohup bash -c \"for j in \\\`ps -ef | grep -v grep | grep java | awk '{print \\\$2}'\\\`; do kill -9 \\\$j; echo \\\"Process id \\\$j is killed\\\"; done\" > foo.out 2> foo.err < /dev/null &"
done

更新:请不要因为转义字符的数量而自杀。

票数 0
EN

Stack Overflow用户

发布于 2013-10-18 04:55:34

在远程交互操作中,bash或任何其他shell都不能接受良好的过程。

使用expect语言来做你想做的事。http://expect.sourceforge.net/

我们在1000多个主机中使用expect,它运行良好,尝试:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19441712

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档