上次的版本http://blog.chinaunix.net/uid-21142030-id-5613029.html
點選(此處)折疊或打開
- [10:58 t ~]$ cat rsync.t
- #!/usr/bin/env bash
- #set -x
- #2015-08-18: 修複直接壓縮201目錄的bug
- #2015-09-28: 新加項目分類目錄,新加多重判斷
- #2015-10-19: 修複與glusterfs沖突問題.
- #2016-04-08: 處理磁盤空緊張時無法處理日志壓縮上傳導緻空間滿問題。
- #2016-04-11: 解決目錄非單獨挂載時識别為/無限循環問題。
- #2016-04-12: 優化搜尋邏輯,添加輸出日志。
- LOGPATH=$1
- PROJECT=$2
- SLEEPTIME=1s
- DATETIME=$(date +%F_%T)
- DATE=$(date +%F)
- IP=$(LC_ALL=C /sbin/ifconfig|grep "inet addr:"|grep -v "127.0.0.1"|cut -d: -f2|awk '{print $1}'|sed ':a;$!N;s/\n/_/g;ta;P;D')
- LINE=`seq -s= 80|sed 's/[0-9]*//g'`
- USER=admin
- export RSYNC_PASSWORD=skymobi
- RSYNCIP=192.168.1.2
- RSYNCMODULE=chss-t
- RSYNCCONFMODULE=chss-tc
- RSYNCDIR=${PROJECT}/"$IP"
- FINDLOGFILE=/tmp/find_"$IP".log.$DATE
- RSYNCLOGFILE=/tmp/rsync_"$IP".log.$DATE
- RSYNCEXELOGFILE=/tmp/rsync.exe.log.$DATE
- REGEX="-regex .*logs/\(.*log\)?.*201.*\(.*log\)?\(.gz\)?"
- REGEX2="-regex .*tar.gz"
- TIME="-mtime +${DAYS:=1}"
- DEL="-exec rm -rfv {} ;"
- COMPRESSION="-exec tar -zcvf `basename {}`_${RSYNCMODULE}.tar.gz {} --remove-files --exclude=*tar.gz ;"
- #建立目錄
- echo -e "$LINE\n$DATETIME : Create directory for upload."
- mkdir -p /tmp/$RSYNCDIR
- echo -e "$DATETIME : Upload create directory.\n$LINE"
- for rspath in $RSYNCMODULE $RSYNCCONFMODULE
- do
- rsync -atv --log-file=${RSYNCLOGFILE} /tmp/${PROJECT} ${USER}@"$RSYNCIP"::${rspath}
- done
- #掃描日志
- for Path in $LOGPATH
- echo -e "$LINE \n$DATETIME : Operation on the [ $Path ] directory "
- #1.是否存在目錄
- if [ -d /$Path ];then
- #########################################
- RSYNC(){
- if test $# -ne 0;then
- rsync -aERtvz --no-p --chmod=Do+rX,Fo-X --log-file=${RSYNCLOGFILE} --remove-source-files --skip-compress=*.gz "$@" ${USER}@"$RSYNCIP"::${ttype:=$RSYNCMODULE}/${RSYNCDIR}
- else
- echo "$DATETIME : no $RSYNCMODULE.tar.gz file found."
- return 1
- fi
- }
- FINDER(){
- find -L /${Path} $@
- SPACECOUNT(){
- df -P|grep /${Path} |tail -n 1 |awk '{print $5}'|awk -F% '{print $1}'
- ##########################################
- #2.是否空間緊張
- echo "$DATETIME : Start while."
- starttime=`date`
- SPACE=`SPACECOUNT`
- Count=0
- while test -n "$SPACE" -a "${SPACE:=0}" -gt 20 -a $Count -lt 2
- do
- if [ $SPACE -gt 80 ];then
- echo "$DATETIME : Start del."
- TIME="-mmin +720"
- FINDER "$REGEX" "-a" "$TIME" "$DEL" >> $FINDLOGFILE
- SPACE=`SPACECOUNT`
- continue
- elif [ $SPACE -gt 60 ];then
- echo "$DATETIME : Start upload file direct."
- echo '60%
- TIME="-mmin +60"
- RSYNC `FINDER "$REGEX" "-a" "$TIME"`
- ((Count+=1))
- #2.
- echo "$DATETIME : Start compression."
- echo 'space
- TIME="-mmin +0"
- FINDER "$REGEX" "-a ! $REGEX2" "-a" "$TIME" "$COMPRESSION" >> $FINDLOGFILE
- echo "new space is $SPACE"
- break
- done
- endtime=`date`
- haldertime=$((`date -d "$endtime" +%s`-`date -d "$starttime" +%s`))
- echo "haldertime:$haldertime"
- #3.執行上傳操作
- echo "$DATETIME : Start upload tar.gz file."
- # for ttype in ${RSYNCMODULE} #${RSYNCCONFMODULE}
- # do
- RSYNC $(find /$Path -type f -name "*_${RSYNCMODULE}.tar.gz" -a ! -regex '.*/brick/.*')
- #RSYNC $(find /$Path -type f -name "*_$ttype.tar.gz" -a ! -regex '.*/brick/.*')
- # done
- echo "upload_tar_gz_haldertime:$haldertime"
- #1.
- else
- echo /${Path} does not exist...
- fi
- echo -e "$DATETIME : [ $Path ] To the end of the directory operation. \n$LINE"
- done >>$RSYNCEXELOGFILE
點選(此處)折疊或打開
- RSYNCIP=192.168.165.88
- [11:00 t ~]$ cat while.t
- #!/bin/bash
- set -x
- LOGPATH='opt app data app1'
- PROJECT=talentest
- sleeptime=0.5h
- while :
- time /bin/bash /bin/rsync.t "$LOGPATH" $PROJECT
- sleep $sleeptime