Ssh

遍歷伺服器並執行命令

  • December 7, 2017

我在一個名為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 重定向標準輸入(實際上,阻止從標準輸入讀取)。

引用自:https://serverfault.com/questions/886621