2013-06-26 6 views
1

Я хочу, чтобы запустить ожидать сценарий внутри сценария оболочки, который подключается к удаленной машине с помощью SSH, цель состоит в том, чтобы сделать это в параллельном методе, как это:Параллельный удаленный SSH к одной машине

' #bin/bash  
(expect_script_ssh_machine1.tcl parameter1 > file1) &  
(expect_script_ssh_machine1.tcl parameter2 > file2) &  
(expect_script_ssh_machine1.tcl parameter3 > file3) &  
wait 

` сценарий ожидания выглядит примерно так:

#/bin/expect -f 
spawn ssh [email protected] 
...code... 

сценарий ожидания занимает около 30 секунд, чтобы выполнить задачу и распечатать результат. Возможно ли это? Возможно, он может работать с разными машинами, но с одной уникальной машиной. Я не уверен, что скрипт может одновременно выполнять 3 ssh-подключения к одной уникальной машине.

Благодаря

+0

Вы пробовали? Это работает? Не могли бы вы просто заменить '&' на ';' и дождаться завершения каждой задачи? –

+0

Да, я пробовал, но получаю только результаты последнего сценария ожидания. И если я поставлю ';' он работает, но это уже не параллельная задача. – Shannon

+1

Можете ли вы перенаправить 'stdout' в сценарии' expect' ('expect' имеет такие ключи, как' -d', но также более мощные функции 'tcl' для обработки вывода)? Нужно ли параллельно выполнять эту работу? При выполнении простых задач, которые записываются в файл, я использовал 'pssh' (инструмент python) для создания нескольких соединений без проблем. Я думаю, что 'bash',' ssh', 'expect' или' & 'ест ваш выход здесь, и вам, возможно, придется сказать сценарию напрямую, чтобы перенаправить' stderr' в 'stdout'. –

ответ

1

Если изменить первые две строки сценария из:

(expect_script_ssh_machine1.tcl parameter1 > file1) & 

к:

(expect_script_ssh_machine1.tcl parameter1 > file1) 2>&1 

поможет ли это?

+0

Я постараюсь сделать то, что вы посоветуете, но я хотел бы знать, что означает ваше предложение ('2> & 1'). – Shannon

+1

Это означает перенаправление 'stderr' на' stdout' проверку страниц 'bash' или' sh'. –

+0

Привет, спасибо за объяснение. Я попытался сделать то, что вы сказали, но если я изменил две первые строки, как вы сказали, эти строки не выполняются в фоновом режиме, поэтому у них нет ошибок. Поэтому я попытался выполнить этот код: '(expect_script_ssh_machine1.tcl parameter1> file1 2> & 1) & (expect_script_ssh_machine1.tcl parameter2> file2 2> & 1) & (expect_script_ssh_machine1.tcl parameter3> file3) & wait' Однако я не Не получайте ошибку ... – Shannon