четверг, 10 июля 2014 г.

Сценарий копирования тучи файлов группами. v2 с добавлением в группу

Добавил возможность пополнять группу до предела, по окончанию копирования какой-то части файлов. То есть если запускали 50 операций копирования файлов разного размера, то часть файлов скопируется быстрее, чем другие, то в группу будут добавляться новые операции копирования, так что ты всегда держалось около максимального количества операций копирования.
 Этот сценарий важен для миграций, переноса баз данных.

#!/bin/bash
SOURCEPATH=/db1/fs0/vdb1_1.dir
DESTPATH=/tt/fs0
if ! [ -d $DESTPATH ]; then
 echo "No destination directory $DESTPATH"
 exit 1
fi
if ! [ -d $SOURCEPATH ]; then
 echo "No source directory $SOURCEPATH"
 exit 1
fi

#GRP - count files of group
declare -i GRP=50

declare -a FILES
FILES=(`ls ${SOURCEPATH} | tr '\n' ' '`)
#echo ${FILES[@]}
file_count=${#FILES[*]}
echo "Total files for work: " $file_count...

newJob()
{
 echo "--> Adding new job. File " $1 " will be copied"
 (cp -p $SOURCEPATH/$1 $DESTPATH;) &
}


addJob(){
local -a job
 local -i jobCount
 job=(`jobs -p`)
 #echo "> addJob: Jobs: " ${job[@]}
 jobCount=${#job[@]}
 echo "> addJob: jobCount: " $jobCount
 if (( $jobCount < $GRP )); then
   return 1
 else
  return 0
 fi
}

#MAIN
start=`date +%s`
echo "------------------ main: Starting at " $start " -------------"
for i in $(seq 0 $file_count)
do
 cfile=${FILES[$i]}
 addJob
 res=$?
 while [ $res -eq 0 ]
     do
         echo "> main: Sleeping ....."
         sleep 5
         addJob
         res=$?
     done

 echo "> ---------------- main: Number general: " $i "(" $file_count ")"
 echo "> main: adding job"
 newJob $cfile

done
echo "---> Waiting last jobs"
wait
end=`date +%s`
echo "---------------- main: Working time at " $((end-start))

Комментариев нет: