请帮忙。我需要在这个多线程rsync脚本中添加一个日志文件

时间:2015-01-29 09:33:51

标签: shell

定义source,target,maxdepth和cd to source

 source="/media"
    target="/tmp"
    depth=20
    cd "${source}"

设置最大并发rsync线程数

 maxthreads=5

在再次检查rsync线程数之前等待多长时间

 sleeptime=5

在maxdepth级别

中查找源目录中的所有文件夹
 find . -maxdepth ${depth} -type d | while read dir
    do

确保忽略父文件夹

 if [ `echo "${dir}" | awk -F'/' '{print NF}'` -gt ${depth} ]
    then

剥离前导点斜线

 subfolder=$(echo "${dir}" | sed 's@^\./@@g')
    if [ ! -d "${target}/${subfolder}" ]
    then

创建目标文件夹并设置所有权和权限以匹配来源

mkdir -p "${target}/${subfolder}"
chown --reference="${source}/${subfolder}" "${target}/${subfolder}"
chmod --reference="${source}/${subfolder}" "${target}/${subfolder}"
    fi

确保运行的rsync线程数低于阈值

while [ `ps -ef | grep -c [r]sync` -gt ${maxthreads} ]
do
echo "Sleeping ${sleeptime} seconds" 
sleep ${sleeptime}
done

在后台运行当前子文件夹的rsync并将其中一个移到下一个

nohup rsync -au "${source}/${subfolder}/" "${target}/${subfolder}/" 
    </dev/null >/dev/null 2>&1 &
    fi
    done

查找maxdepth级别以上的所有文件,并同步rsync

find . -maxdepth ${depth} -type f -print0 | rsync -au --files-from=- --from0 ./ "${target}/"

2 个答案:

答案 0 :(得分:1)

感谢您的帮助。通过将-v开关添加到rsync,我解决了这个问题。

答案 1 :(得分:0)

不确定这是不是你所追求的(我不知道rsync是什么),但你不能只是运行脚本,

./myscript > logfile.log

./myscript | tee logfile.log

(即:如果你想看到输出的话,管道到三通)?

或者......不确定这是真正的编码器所做的,但你可以将脚本中每个命令的输出附加到日志文件中,例如:

#at the beginning define the logfile name:
logname="logfile"
#remove the file if it exists
if [ -a ${logfile}.log ]; then rm -i ${logfile}.log; fi
#for each command that you want to capture the output of, use >> $logfile
#eg:
mkdir -p "${target}/${subfolder}" >> ${logfile}.log

如果rsync有几个带有名称的线程,我想你可以将它们作为>> ${logfile}${thread}.log存储到单独的日志文件中,并将最后的文件连接成1个日志文件。

希望有帮助吗? (我很想回答 - 所以如果我发布的内容基本/不好,或者您已经考虑过这些想法,我会道歉!)