`
qindongliang1922
  • 浏览: 2148295 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
7265517b-f87e-3137-b62c-5c6e30e26109
证道Lucene4
浏览量:116343
097be4a0-491e-39c0-89ff-3456fadf8262
证道Hadoop
浏览量:124612
41c37529-f6d8-32e4-8563-3b42b2712a50
证道shell编程
浏览量:58490
43832365-bc15-3f5d-b3cd-c9161722a70c
ELK修真
浏览量:70378
社区版块
存档分类
最新评论

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)
本公众号的内容是有关搜索和大数据技术和互联网等方面内容的分享,也是一个温馨的技术互动交流的小家园,有什么问题随时都可以留言,欢迎大家来访!


1
1
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics