『壹』 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"