Добавил возможность пополнять группу до предела, по окончанию копирования какой-то части файлов. То есть если запускали 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
}
Этот сценарий важен для миграций, переноса баз данных.
#!/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))
Комментариев нет:
Отправить комментарий