Ssh
遍歷伺服器並執行命令
我在一個名為
network_list.txt
. 我如何執行伺服器並執行命令並顯示結果?我嘗試了以下方法:filename="network_list.txt" service=httpd while read -r line do name="$line" ping -c 3 $name > /dev/null 2>&1; RETVAL=$? if [ $RETVAL -ne 0 ] then echo "$name is down" else echo "$name is up and running" fi http_status=$(ssh $name ps -ef | grep -v grep | grep $service | wc -l) if [ $http_status -ne 0 ] then echo "$service is up and running in $name" else echo "$service is down in $name" fi done < "$filename"
但它在第一台伺服器後停止。
謝謝 :) 。
您需要將循環中的 SSH 命令的標準輸入重定向到無處以防止讀取所有行。這應該這樣做:
http_status=$(ssh $name "ps -ef | grep -v grep | grep $service | wc -l" < /dev/null)
有
-n -x
參數的解決方案:http_status=$(ssh -nx name ps -ef | grep -v grep | grep $service | wc -l)
-x
禁用 X11 轉發以消除可能的消息X11 forwarding request failed
。從
-n
/dev/null 重定向標準輸入(實際上,阻止從標準輸入讀取)。