參考博文:html
參考1:CentOS6.5實現rsync+inotify實時同步 linux
參考2:inotify-tools+rsync實時同步文件安裝和配置 git
CentOS 6.3下rsync服務器的安裝與配置 對 rsync命令解釋的很詳細github
rsync 常見錯誤與解決方法整理shell
參考1比較詳細,可是有點問題,參考2主服務器端比較詳細 可是有小問題 把兩者結合培正成功apache
注意:從主服務器拷貝到從服務器,千萬別搞混了。vim
須要肯定你的系統是否支持inotify:centos
在安裝inotify-tools前請先確認你的linux內核是否達到了2.6.13,而且在編譯時開啓了CONFIG_INOTIFY選項,也能夠經過如下命令檢測,若是出現如下輸出,說明支持:bash
[root@localhost ~]# ls /proc/sys/fs/inotify/ max_queued_events max_user_instances max_user_watches
下載並安裝inotify-tools:服務器
wget http://cloud.github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz tar xvf inotify-tools-3.14.tar.gz cd inotify-tools-3.14 ./configure make;make install
接下來須要寫兩個SH腳本,inotify_init.sh和inotify_monitor.sh:
inotify_init.sh 用於第一次初始化,也就是運行一次完整的RSYNC同步.
vim /root/inotify_init.sh
內容以下:
#!/bin/sh SRC=/主服務器A須要同步的目錄/ #記得在最後面加/否則RYNC會自動增長一層目錄 DES=backup IP=從服務器B的IP USER=rsync #DST=/etc/rsyncd 遠程rsync模塊下的目錄 INWT=/usr/bin/inotifywait #注意路徑 個人路徑爲:/usr/local/bin/inotifywait
RSYNC=/usr/bin/rsync $RSYNC -zahqt --password-file=/root/rsync.pwd $SRC $USER@$IP::$DES
保存退出.
設置可執行權限:
vi /root/inotify_monitor.sh
內容以下:
#!/bin/bash ########################### sync[0]='/主服務器須要同步的目錄/,從服務器B的IP,backup,rsync' # localdir,host,rsync_module,auth_user INWT=/usr/bin/inotifywait #注意路徑 個人路徑爲:/usr/local/bin/inotifywait RSYNC=/usr/bin/rsync PASS=/root/rsync.pwd ###########################
for item in ${sync[@]}; do
dir=`echo $item | awk -F"," '{print $1}'`
host=`echo $item | awk -F"," '{print $2}'`
module=`echo $item | awk -F"," '{print $3}'`
user=`echo $item | awk -F"," '{print $4}'`
$INWT -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f %e' \
--event CLOSE_WRITE,create,move $dir | while read date time file event
do
#echo $event'-'$file
case $event in
MODIFY|CREATE|MOVE|MODIFY,ISDIR|CREATE,ISDIR|MODIFY,ISDIR)
if [ "${file: -4}" != '4913' ] && [ "${file: -1}" != '~' ]; then
cmd="$RSYNC -zahqzt --exclude='*' --password-file=$PASS \
--include=$file $dir $user@$host::$module "
echo $cmd >> /var/log/rsyncd.log #寫入日誌文件
$cmd
fi
;;
MOVED_FROM|MOVED_FROM,ISDIR|DELETE,ISDIR)
if [ "${file: -4}" != '4913' ] && [ "${file: -1}" != '~' ]; then
cmd="$RSYNC -zahqzt --password-file=$PASS --exclude=$file \
$dir $user@$host::$module "
echo $cmd >> /var/log/rsyncd.log
$cmd
fi
;;
esac
done &
done
加 執行權限:chmod
+x
/root/inotify_monitor
.sh
設置RSYNC自動登陸驗證密碼,認證文件只用加入密碼便可
保存,退出
設置只有ROOT才能夠查看的權限.
chmod
600
/root/rsync
.
pwd
yum
install
rsync
-y
#安裝rsync服務
配置RSNYD服務:
vi
/etc/rsyncd
.conf
uid = root gid = root use chroot = no max connections = 0 #沒有鏈接限制 pid file = /var/run/rsyncd.pid lock file = /var/run/rsync.lock log file = /var/log/rsyncd.log [backup] path = /從服務器B本地用於存放備份的目錄 ignore errors read only = no list = false hosts allow = 主服務器A的IP auth users = rsync secrets file = /etc/rsync.pwd
設置密碼文件:
vim
/etc/rsync
.
pwd
#添加如下內容
rsync
:123456
chmod
600
/etc/rsync
.
pwd
#修改密碼文件權限爲600
注:當配置文件中參數strict modes爲true時,rsync認證口令文件的權限必定是600,不然客戶端將不能鏈接服務器。rsync認證口令文件中每一行指定一個 用戶名:口令 對,格式爲:username:passwd。
啓動RSYNCD
vi
/etc/rc
.
local
/root/inotify_init.sh
/root/inotify_monitor.sh
保存退出
運行
/root/inotify_init.sh
/root/inotify_monitor.sh