Linux远程ssh脚本执行命令问题


总结下使用ssh远程执行命令需要注意点:

一般我们会使用ssh ip "执行命令"这种格式来执行远程是shell命令,但是如果是简单的一些操作还好,比如cd,rm,ls,mv等命令一般不会出问题
,但是如果你的脚本任务是,杀死多台机器上的hadoop或者elasticsearch进程,你会怎么做?

直接使用:

ssh h1 "kill -9 `jps | grep Elastic*  | gawk '{print $1}'  ` " 杀死es进程,你会发现,它竟然没有生效? 明明在本地执行

kill -9 `jps | grep Elastic*  | gawk '{print $1}'  `

这个命令是可以生效的,为啥,放到远程执行命令中就失效了呢?

其实原因很简单,就是因为没有转义造成的,包括awk变量名引用都需要转义,否则,你会发现,虽然能执行,但结果依旧是不准确的,注意linux中
单引号(所有命令均被当成普通字符处理)
双引号(可引用变量名)
反引号(可以执行linux脚本命令)的区别
看最终的正确的写法:

ssh $host " es_pid=\`jps | grep Elasticsearch | gawk '{print \$1}'\` && kill \$es_pid    "




最后欢迎大家扫码关注微信公众号:我是攻城师(woshigcs),我们一起学习,进步和交流!(woshigcs)
本公众号的内容是有关搜索和大数据技术和互联网等方面内容的分享,也是一个温馨的技术互动交流的小家园,有什么问题随时都可以留言,欢迎大家来访!


猜你喜欢

转载自qindongliang.iteye.com/blog/2261680