[記錄]inotifywait+rsync腳本和sersync2服務檢測的腳本

1)inotifywait+rsync腳本:

#!/bin/bash src=/data/ # 須要同步的源路徑 des=data # 目標服務器上 rsync --daemon 發佈的名稱,rsync --daemon這裏就不作介紹了,網上搜一下,比較簡單。 rsync_passwd_file=/etc/rsyncd.passwd # rsync驗證的密碼文件 ip1=192.168.0.18 # 目標服務器1 ip2=192.168.0.19 # 目標服務器2 user=root # rsync --daemon定義的驗證用戶名 cd ${src} # 此方法中,因爲rsync同步的特性,這裏必需要先cd到源目錄,inotify再監聽 ./ 才能rsync同步後目錄結構一致,有興趣的同窗能夠進行各類嘗試觀看其效果 /usr/local/bin/inotifywait -mrq --format '%Xe %w%f' -e modify,create,delete,attrib,close_write,move ./ | while read file # 把監控到有發生更改的"文件路徑列表"循環 do INO_EVENT=$(echo $file | awk '{print $1}') # 把inotify輸出切割 把事件類型部分賦值給INO_EVENT INO_FILE=$(echo $file | awk '{print $2}') # 把inotify輸出切割 把文件路徑部分賦值給INO_FILE echo "-------------------------------$(date)------------------------------------" echo $file #增長、修改、寫入完成、移動進事件 #增、改放在同一個判斷,由於他們都確定是針對文件的操做,即便是新建目錄,要同步的也只是一個空目錄,不會影響速度。 if [[ $INO_EVENT =~ 'CREATE' ]] || [[ $INO_EVENT =~ 'MODIFY' ]] || [[ $INO_EVENT =~ 'CLOSE_WRITE' ]] || [[ $INO_EVENT =~ 'MOVED_TO' ]] # 判斷事件類型 then echo 'CREATE or MODIFY or CLOSE_WRITE or MOVED_TO' rsync -avzcR --password-file=${rsync_passwd_file} $(dirname ${INO_FILE}) ${user}@${ip1}::${des} && # INO_FILE變量表明路徑哦 -c校驗文件內容 rsync -avzcR --password-file=${rsync_passwd_file} $(dirname ${INO_FILE}) ${user}@${ip2}::${des} #仔細看 上面的rsync同步命令 源是用了$(dirname ${INO_FILE})變量 即每次只針對性的同步發生改變的文件的目錄(只同步目標文件的方法在生產環境的某些極端環境下會漏文件 如今能夠在不漏文件下也有不錯的速度 作到平衡) 而後用-R參數把源的目錄結構遞歸到目標後面 保證目錄結構一致性 fi #刪除、移動出事件 if [[ $INO_EVENT =~ 'DELETE' ]] || [[ $INO_EVENT =~ 'MOVED_FROM' ]] then echo 'DELETE or MOVED_FROM' rsync -avzR --delete --password-file=${rsync_passwd_file} $(dirname ${INO_FILE}) ${user}@${ip1}::${des} && rsync -avzR --delete --password-file=${rsync_passwd_file} $(dirname ${INO_FILE}) ${user}@${ip2}::${des} #看rsync命令 若是直接同步已刪除的路徑${INO_FILE}會報no such or directory錯誤 因此這裏同步的源是被刪文件或目錄的上一級路徑,並加上--delete來刪除目標上有而源中沒有的文件,這裏不能作到指定文件刪除,若是刪除的路徑越靠近根,則同步的目錄月多,同步刪除的操做就越花時間。這裏有更好方法的同窗,歡迎交流。 fi #修改屬性事件 指 touch chgrp chmod chown等操做 if [[ $INO_EVENT =~ 'ATTRIB' ]] then echo 'ATTRIB' if [ ! -d "$INO_FILE" ] # 若是修改屬性的是目錄 則不一樣步,由於同步目錄會發生遞歸掃描,等此目錄下的文件發生同步時,rsync會順帶更新此目錄。 then rsync -avzcR --password-file=${rsync_passwd_file} $(dirname ${INO_FILE}) ${user}@${ip1}::${des} && rsync -avzcR --password-file=${rsync_passwd_file} $(dirname ${INO_FILE}) ${user}@${ip2}::${des} fi fi done

  

2)sersync2實時監控目錄同步服務進程監控腳本check_sersync2.sh:bash

#!/bin/bash

usage() {
    echo -e "\n  Usage:  $0 sersync_config_file"
    echo -e "\nExample:  $0 /usr/local/sersync/confxml.xml\n"
    exit -1
}

if [ $UID -ne 0 ]; then
    echo -e "\nYou should run \"$0 $@\" as root.\n"
    exit -1
fi

if [ $# -ne 1 ] || [ ! -f $1 ] ; then
    usage
fi

DAEMON="/usr/local/sersync/sersync2"
CONFIG_FILE=$1
LOG_FILE="/var/log/check_sersync.log"
ARGS="-o $CONFIG_FILE -d"

function start() {
    echo "$DAEMON $ARGS"
    $DAEMON $ARGS >/dev/null 2>&1
    sleep 3
    processes_num=$(status)
    if [ $processes_num -eq '1' ]; then
        log $LOG_FILE "sersync service start success."
    else
        log $LOG_FILE "sersync service start failed."
    fi
}

function stop() {
    ps aux | grep -v grep | grep "${DAEMON}.*${CONFIG_FILE}" | awk '{printf "%s ",$2}' | xargs kill -9
    processes_num=$(status)
    if [ $processes_num -eq '0' ]; then
        log $LOG_FILE "sersync service stop success."
    else
        log $LOG_FILE "sersync service stop failed."
    fi
}

function status() {
    processes_num=`ps aux | grep -v grep | grep "${DAEMON}.*${CONFIG_FILE}" -wc`
    echo $processes_num
}

function log() {
    current_time=`date +"%Y-%m-%d %H:%M:%S"`
    echo [$current_time] $CONFIG_FILE: $2>>$1
}

processes_num=$(status)
case "$processes_num" in
    0)
        log $LOG_FILE "sersync service was died."
        start
        ;;
    1)
        log $LOG_FILE "sersync service is running."
        ;;
    *)
        log $LOG_FILE "the system has launched $processes_num of the same sersync process."
        stop
        start
        ;;
esac

  

添加crontab任務執行:*/1 * * * * root /bin/bash /check_sersync2.sh /conf_tongbu.xml &服務器

如下這個和check_sersync2.sh腳本相似,也是監控sersync服務的,相互對比一下:rest

#!/bin/bash
# usage:
#       1.將腳本命名爲checksersync.sh
#       2 chmod +x checkrsync.sh 給腳本賦予可執行權限
#       2.添加到計劃任務
#       */1 * * * * /root/checksersync.sh


logfile='/etc/sersync/checksersync.log';

function sersync_is_running(){
        threadnum=`ps aux|grep sersync2|grep -v grep -wc`;      #此處爲監控sersync的監控手段,查找sersync2進程
        if [ "$threadnum" -eq '0' ];then
                echo '0';
        else
                echo '1';
        fi
        return;
}

function current_time(){
        if [ -z "$1" ];then
                format="%Y-%m-%d %H:%M:%S%Z";
        else
                format=$1;
        fi
        echo `date +"$format"`;
        return;
}

function logtofile(){
        echo $(current_time) $2>>$1;
}

function sersync_restart(){
        /etc/sersync/sersync2 -r -d -o /etc/sersync/confxml.xml >/dev/null 2>&1;
        sleep 3;

        threadnum=$(sersync_is_running);
        if [ $threadnum -eq '0' ]; then
                echo "0";
        else
                echo '1';
        fi
        return;
}

isrunning=$(sersync_is_running);

mailzt=`cat $logfile|tail -1 > /etc/sersync/body.txt`

if [ "$isrunning" -eq '0' ];then
        logtofile $logfile "mail sersync service was died.";
        mail -s "rsync sersync service was died." xxx@xxx.com < /etc/sersync/body.txt

        restart=$(sersync_restart);

        if [ $restart -eq '0' ];then
                logtofile $logfile "sersync service restart failed.";
        mail -s "rsync sersync service was died." xxx@xxx.com < /etc/sersync/body.txt
        else
                logtofile $logfile "sersync service restart success.";
        mail -s "rsync sersync service restart success" xxx@xxx.com < /etc/sersync/body.txt
        fi
else
        logtofile $logfile "sersync service is running.";
fi

exit 0;

  

 win7使用cwRsync客戶端上傳文件的方式:code

1.安裝cwRsync。orm

2.編寫bat腳本實現上傳:xml

cwrsync.bat:blog

@echo off
set RSYNC_HOME=C:\Program Files (x86)\cwRsync\bin
cd %RSYNC_HOME%
rsync -avz --password-file='/cygdrive/c/Program Files (x86)/cwRsync/bin/pass.txt' --progress --port=10873 /cygdrive/e/myfiles/test.txt test@192.168.5.3::test遞歸

 

說明:pass.txt文件存放rsync的密碼文件, /cygdrive/e是cwRsync用於指定盤符e盤的方式進程

執行cwrsync.bat腳本便可實現上傳文件。事件

相關文章
相關標籤/搜索