LINUX.ORG.RU

Написание скриптов для архивирования


0

0

Доброго времени суток. Есть следующая проблемка. Написал скрипт, который архивирует данные. Из скрипта запускается куча фоновых процессов, которые занимаются архивацией. Но в конце надо записать все что получилось на DVD, соответственно надо дождаться, пока завершаться все фоновые процессы. Как это организовать в скрипте?

Сейча скрипт выглядит следующим образом: #/bin/sh

BASE_DIR=/home/backup BACKUP_DIR=$BASE_DIR/bck`date +"%Y%m%d"`

mkdir $BACKUP_DIR touch $BACKUP_DIR/data_archive

for i in $( cat $1 ) do tar cvf $BACKUP_DIR/`basename $i`_`date +"%Y%m%d"`.tar $i > /dev/null bzip2 -z9 $BACKUP_DIR/`basename $i`_`date +"%Y%m%d"`.tar& done

anonymous

Ответ на: комментарий от bigbit

На куче процессов будет твориться жуткая путаница, например, если процесс 3 завершился раньше процесса 1, а wait'ы расставлены в порядке 1-2-3 (тем более что PID не могут инкрементироваться до бесконечности, так что теоретически возможен вариант, что пока первый вейт ждал завершения первого процесса, пид бывшего третьего вейта достался кому-нибудь ещё).

Поэтому более правильным вариантом будет освоение make (info make; hint: запускать как make -j n , где n --- количество скриптов в куче)

bakagaijin
()

И ещё: 1) зачем указывать tar'у v, если его вывод всё равно отправляется в /dev/null? 2) Если мне не изменяет память, tar умеет передавать опции компрессору 3) Если даже не умеет, то почему нельзя отключить verbose output и использовать пайпы?

bakagaijin
()

А почему, собственно, запускать их всех в фоне? Имхо, время-то выполнения будет то же самое. Или я не прав?

Laz ★★★★★
()

можно в цикле антил слип ставить а как условие использовать атгрепаный ps на наличие запущенных таров

until [`ps -u user -o command|grep tar |grep -v grep|wc -l ` -eq 0]
do
sleep 2m;
done

AleX ★★★
()

>tar cvf $BACKUP_DIR/`basename $i`_`date +"%Y%m%d"`.tar $i > /dev/null bzip2 -z9

tar cjf????

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