2014-03-13 2 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», она просто показывает пробел. Также он помещает слово «do» в конце каждого 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

Смежные вопросы