LINUX.ORG.RU

распараллеливание в shell?


0

0

Добрый день, в шел скрипте есть что-то типа:
cp $SOURCEB\/indx/* $NEWB2/$1
cp $SOURCEB\/data/* $NEWB1/$1

Как сделать так, чтобы эти два копирования запускались одновременно, а не последовательно? Соотв-но продолжение выполнения только после успешного копирования. (Просто копируется с 2-х разных носителей, на 2 других, поэтому хотелось бы побыстрее).
Заранее благодарен за ответ


> Соотв-но продолжение выполнения только после успешного копирования.

сам сказал - сам ответил?

или если у тебя параллельно запускается, то что продолжать если все уже завершилось?

anonymous
()
Ответ на: комментарий от anonymous

Видать я как-то неправильно объяснил:

.. скрипт пересоздает БД: сначала копируются файлы базы, а потом она поднимается. Хочу чтобы копирование быстрее было! (в 2 потока) .. после копирования в скрипте поднятие базы, значит надо дождаться всех файлов!

favt
() автор топика
Ответ на: комментарий от Devix

Я вот не пойму, а почему вы все ждете завершения только одного копирования? :) что, другое не может закончиться позже?

Cy6erBr4in ★★★
()

> Как сделать так, чтобы эти два копирования запускались одновременно, а не последовательно?

через job control, например

# запускаем первое
cp $SOURCEB\/indx/* $NEWB2/$1 &

# и второе
cp $SOURCEB\/data/* $NEWB1/$1

# ок если мы здесь второе закончилось
# ждем первого

wait %-


gods-little-toy ★★★
()
Ответ на: комментарий от Devix

Если хочешь узнать статус завершения обоих можно так:

cp $SOURCEB\/indx/* $NEWB2/$1 &
CP_PID=$!

cp $SOURCEB\/data/* $NEWB1/$1 &

wait $!
echo "Status 2: $?"

wait $CP_PID 
echo "Status 1: $?"

Devix
()

>продолжение выполнения только после успешного копирования.

(cp $SOURCEB\/indx/* $NEWB2/$1; res1=$?) &
(cp $SOURCEB\/data/* $NEWB1/$1; res2=$?) &

wait

if [ $res1 -ne 0 -o $res2 -ne 0 ]; then
  echo "we are fucked up, man"
fi

sdio ★★★★★
()
Ответ на: комментарий от sdio

А если дор этого всего еще запущен один очень долгий фоновый процесс?

Devix
()
Ответ на: комментарий от Devix

Вот законченный вариант:

cp $SOURCEB\/indx/* $NEWB2/$1 &
CP_PID=$!

cp $SOURCEB\/data/* $NEWB1/$1 &

wait $!
[ $? -ne 0 ] && exit 1
wait $CP_PID
[ $? -ne 0 ] && exit 1 

echo "OK"

Devix
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.