rsync(三):inotify+rsync監控腳本

#!/bin/bash
 ######################################################################
 # rsync通用實時同步腳本:
 # 注意:全部目錄結尾必須帶/
 #
 ######################################################################
 # 源服務器同步目錄
 src_dir=/opt/src_dir/
 # 目標服務器rsync同步目錄模塊名稱
 dst_module=dst_module
 # 不須要同步的目錄,若是有多個,每一行寫一個目錄,使用相對於同步模塊的路徑;
 exclude_list=/usr/local/inotify/exclude_upload.list
 # 目標服務器rsync同步用戶名
 rsync_user=rsync_user
 # 目標服務器rsync同步用戶的密碼在源服務器的存放路徑
 rsync_passwd=/etc/rsync_user.password
 # 目標服務器ip,多個ip用空格分開
 dst_ip=168.0.0.22 168.0.0.23
 # 日誌文件
 log_file=/opt/logs/rsync/dst_module.log
 # 使用inotify -mrq 遞歸查詢目錄,打印監控事件的信息並始終保持事件監聽狀態,timefmt指定時間輸出的格式,format:打印使用指定的輸出相似格式字符串,-e經過此參數能夠指定須要監控的事件
 # 須要手動修改inotify命令路徑及監聽的事件
 # 切換到須要同步源目錄,下面命令監聽相關對目錄
 cd ${src_dir}
 # 腳本啓動時作一次全量同步
 for each_ip in ${dst_ip};do
    rsync -avHR --delete --progress --exclude-from=${exclude_list} --password-file=${rsync_passwd}  ${src_dir} ${rsync_user}@${each_ip}::${dst_module}
 done
 # 開始監聽目錄 close_write,modify,delete,create,move,attrib,
 # 建立文件時會有create, modify,close_write 三個事件,修改文件時會有modify,close_write 兩個事件,因此只須要監聽 close_write事件
 # 建立目錄時會有create, isdir 兩個事件,故監聽isdir事件
 # 目標服務器通常對attrib屬性沒有要求,幫助不監聽此事件
 /usr/local/inotify/bin/inotifywait -mrq --timefmt '%Y-%m-%d_%H:%M:%S' --format '%T %Xe %w%f' -e close_write,delete,move,isdir ${src_dir} | while read file
 abs_file=`echo $file | awk '{print $3}'`
 do
     for each_ip in ${dst_ip};do
         relative_file=`echo ${abs_file} | awk -F "${src_dir}" '{print $2}'`
         rsync -avHR --delete --progress --exclude-from=${exclude_list} --password-file=${rsync_passwd}  ${relative_file} ${rsync_user}@${each_ip}::${dst_module}
         echo "${relative_file} was rsynced" >> ${log_file} 2>&1
     done
 done
相關文章
相關標籤/搜索