我的用例是远程在多台服务器上运行命令。我在主机之间建立了信任。
所以我有一个这样的命令:命令 1:
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:
rm -rf /floderPath
当我结合(COMMAND 1 + COMMAND 2)这两个它工作正常并且后续文件夹从所有主机中删除。
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:
for i in `ps -ef | grep -v grep | grep java | awk '{print $2}'`; do kill -9 $i; echo "Process id $i is killed"; done
但是现在当我结合 COMMAND 1 和 COMMAND 3 时它根本不起作用。我在这里要做的是杀死所有主机上的所有 JAVA 进程。
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
我可以猜测引号可能使用不当,但我尝试了各种组合,但对我不起作用。我在编写脚本方面没有太多经验,所以请原谅明显的错误。