2016-04-18 204 views
1

我正在嘗試創建一個簡單的bash腳本,它可以ping多個客戶端。如果客戶端不可達,那麼就應該在DB另一臺服務器上啓動更新...我有到數據庫服務器密碼的ssh訪問,所以我努力做到以下幾點:BASH腳本 - 通過ssh連接並運行mysql命令

for i in {11..25} 
do 
     if  ping -q -c 1 192.168.42.$i > /dev/null 2>&1 
     then 
       echo 1 
     else 
       ip=192.168.42.$i 
       ssh [email protected] "mysql -u parkuser -ppass -e 'update SMARTPARK.client SET online=0 where SMARTPARK.ip_client=$ip'" 
     fi 

done 

我「M得到一個bash: mysql: command not found錯誤使用時......顯然MySQL是安裝在數據庫服務器

+0

ssh登錄在沒有密碼,MySQL有它 – besmart

+1

您的更新將反正失敗。 '... ip_client = 192.168.42.11'是無效的,會在sql級別導致語法錯誤。 –

+0

你是對的...我必須使用單引號嗎? – besmart

回答

0

似乎爲我工作得很好。既然你得到了一個沒有找到命令的錯誤,或許這是你的ssh上的$PATH問題。嘗試手動連接,並運行which mysql以獲取可執行文件的完整路徑。對我來說,這是/usr/bin/mysql,那麼你可以嘗試使用,在你的語句,如:

ssh [email protected] "/usr/bin/mysql -u parkuser -ppass -e 'update SMARTPARK.client SET online=0 where SMARTPARK.ip_client=$ip '" 
+1

謝謝!那就是答案! – besmart

0

你有單引號內的單引號,它裏面應該是雙單:

ssh [email protected] "mysql -u parkuser -ppass -e 'update SMARTPARK.client SET online=0 where SMARTPARK.ip_client=$ip '" 
+0

改了它,但什麼都沒發生...... – besmart