2014-11-25 2 views
1

Не могли бы вы помочь мне с любым намеком на проблему ниже?Ждите завершения процесса

я должен послать команду к хозяину (команда нуждается много времени, чтобы выполнить и создает файл):

ssh [email protected] ssh [email protected] 'command1' 

после этого команда запускается на выполнение, мне нужно, чтобы пронестись файл, созданный

ssh [email protected] ssh [email protected] 'gzip file1' 

чем делать то же самое для другого хоста

ssh [email protected] ssh [email protected] 'command1' 
ssh [email protected] ssh [email protected] 'gzip file2' 

можно ли работать как эта команда параллельна, чтобы сэкономить время на выполнение скрипта? благодарим вас заранее.

+0

Что значит «обе команды»? 'command1' и 'gzip'? – Jdamian

+0

Возможный дубликат [bash: запуск нескольких прикованных команд в фоновом режиме] (http://stackoverflow.com/questions/161252/bash-start-multiple-chained-commands-in-background) – l0b0

+0

Мне нужно запустить команды в и сообщите мне, когда они закончатся. , так как команда зависит от одного (меняется), я не могу поместить эти команды в удаленный хост! – Ardit

ответ

4

попробовать что-то вроде

ssh [email protected] 'command1 && gzip file1' & 
ssh [email protected] 'command1 && gzip file1' & 
ssh [email protected] 'command1 && gzip file1' & 

Вы можете поместить все команды в файле на хосте при запуске из

&& в этом контексте работает как ; но вторая команда выполняется только в случае, если первый работы

+0

Вам не хватает начального 'ssh', но это правильная идея. – chepner

+0

Фактически команда является переменной (зависит от ввода), поэтому я не могу поместить их в файл на удаленном хосте. – Ardit

+1

Вот как передать переменную из хоста «start» 'X =« fish »ssh -t host1 ssh -t host2« echo $ X; uname; hostname »' '' '' '' 'quotes get интерполировать для shell, который запускает команду, поэтому отсюда устанавливается $ X – Vorsprung

2

Просто сделать:

ssh [email protected] ssh [email protected] 'command1; gzip file1' 

и если GZIP должна быть запущена только первая команда имеет успех, то:

ssh [email protected] ssh [email protected] 'command1 && gzip file1' 

Вторая команда будет запущена после того, как первый.

+0

если я использую ssh uname1 @ host1 ssh uname2 @ host2 'command1; gzip file1 '& команда запускается в фоновом режиме, как узнать, что она закончена, поэтому я могу получить файл через ftp/sftp? – Ardit

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