2015-01-29 2 views
0

Привет У меня есть сценарий mainscript.sh В основном скрипте у меня есть несколько сценариев чили.Как запустить shellscript параллельно как java-поток

child1.sh 
child2.sh 
child3.sh 
rm -rf /home/bdata/batch/* 

Я запускаю свой mainscript.sh, который будет запускать все дочерние задания параллельно.

mainscript.sh

child1.sh & 
child2.sh & 
child3.sh & 
rm -rf /home/bdata/batch/* 

четвёртое заявление запускается до завершения все исполнения.

Есть ли способ управлять исполнением последней строки после завершения над 3 сценариями параллельно.

+1

Добавить и в конце каждого сценария. Если вы хотите запускать независимо от терминала, перейдите к опции nohup. –

+0

Perl поддерживает многопоточность и разветвление, если это приемлемое решение. Я знаю, что это не совсем оболочка, но почти такая же вездесущая: http://stackoverflow.com/questions/26296206/perl-daemonize-with-child-daemons/26297240#26297240 – Sobrique

+0

@Kate - Это работает, но проблема в том, что я хотите запустить последнюю строку после завершения всех остальных сценариев оболочки. В моем случае она удаляет мою папку, прежде чем заканчивать весь скрипт. – Aman

ответ

2

Просто скажите оболочки ждать, пока дети все мертвы:

child1.sh & 
child2.sh & 
child3.sh & 
wait 
rm -rf /home/bdata/batch/* 
2

Это одно решение:

#!/bin/bash 
./child1.sh & 
./child2.sh & 
./child3.sh & 

Используйте ./ или полный путь к сценарию.

Если команда завершена оператором управления &, то оболочка выполняет команду в фоновом режиме в подоболочке. Оболочка делает не дожидаясь завершения команды, а статус возврата равен 0. Если вы хотите выполнить все дочерние скрипты перед выходом из сценария, добавьте в конец wait (как написано ниже @Mark Setchell).

+2

Добавьте конец в конец, если вы хотите подождать, пока все дети не закончатся, прежде чем выйти из сценария. –

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