2014-03-13 34 views
0

我試圖從ssh運行一些命令。每個遠程服務器有多個變量。在ssh中使用參數運行多個命令

for db_serv in `olsnodes`; do 
    for db_ins in `ssh $db_serv ps -ef | grep ora_pmon_ | grep -v grep | cut -d"_" -f3`; do 
    SessionSayisi=`ssh $db_serv ps -ef | grep $db_ins | grep 'LOCAL=NO'|grep -vc ASM` 
    echo "SessionSayisi= $SessionSayisi $db_ins" 
    done 
done 

這很好,但需要很長時間,因爲命令運行每個變量的ssh。我只需要爲每個服務器連接一次,然後獲得所有變量輸出,然後SSH到另一個。

這裏是我試過,但沒有奏效:

for db_serv in `olsnodes`; do 
ssh $db_serv ps -ef | grep ora_pmon_ | grep -v grep | cut -d"_" -f3 << EOF 
for db_ins in `ps -ef | grep ora_pmon_ | grep -v grep | cut -d"_" -f3`; do 
echo "SessionSayisi= $SessionSayisi $db_ins" 
done 
EOF 
done 
+0

我可以得到的名稱,但不能得到「$ db_ins」變量,它只是顯示空白。另外它在每個EOF的最後放置一個「做」字。 – AloneInTheDark

回答

1

它看起來像你只需要運行一個SSH命令 - 如果你捕捉一個變量的輸出,那麼你就可以運行,其餘您的命令,而不是在遠程機器上:

for db_serv in $(olsnodes); do 
    procs=$(ssh "$db_serv" ps -ef) 
    for db_ins in $(echo "$procs" | grep ora_pmon_ | grep -v grep | cut -d"_" -f3); do 
     SessionSayisi=$(echo "$procs" | grep "$db_ins" | grep 'LOCAL=NO'| grep -vc ASM) 
     echo "SessionSayisi= $SessionSayisi $db_ins" 
    done 
done 
+0

這解決了我的問題,謝謝。 5分鐘後我會將其標記爲解決方案(網站規則)。 – AloneInTheDark