‘壹’ ssh连接centos远程服务器运行指令的问题
总结下使用ssh远程执行命令需要注意点:
一般我们会使用ssh ip "执行命令"这种格式来执行远程是shell命令,但是如果是简单的一些操作还好,比如cd,rm,ls,mv等命令一般不会出问题
,但是如果你的脚本任务是,杀死多台机器上的hadoop或者elasticsearch进程,你会怎么做?
伦理片http://www.dotdy.com/
直接使用:
ssh h1 "kill -9 `jps | grep Elastic* | gawk '{print $1}' ` " 杀死es进程,你会发现,它竟然没有生效? 明明在本地执行
kill -9 `jps | grep Elastic* | gawk '{print $1}' `
这个命令是可以生效的,为啥,放到远程执行命令中就失效了呢?
其实原因很简单,就是因为没有转义造成的,包括awk变量名引用都需要转义,否则,你会发现,虽然能执行,但结果依旧是不准确的,注意linux中
单引号(所有命令均被当成普通字符处理)
双引号(可引用变量名)
反引号(可以执行linux脚本命令)的区别
看最终的正确的写法:
Java代码
ssh$host"es_pid=`jps|grepElasticsearch|gawk'{print$1}'`&&kill$es_pid"