inotify与rsync进行文件同步

inotify是Linux核心子系统之一,做为文件系统的附加功能,它可监控文件系统并将异动通知应用程序。


rsync 是一个相当棒的异地备份系统的指令,可以达到类似镜像(mirror)的功能

rsync 第一次备份的时候需要花费比较长的时间,因为首次要备份所有的文件。但是再次备份文件的时候,仅会复制有差异的数据。这个很重要的哈!

因为 rsync  是通过 SSH 来传输数据的,所以你可以针对 某个用户制作出免密码登录的SSH密钥!如此一来,往后异地备份系统就能够自动地以 crontab 来进行备份了。


利用inotify和rsync实时同步文件

yum  install inotify-tools

利用这两者,将一个同步shell script 写成  /etc/init.d/inotify_rsync 服务。

可以直接利用 service inotify_rsync  start | stop 开关。

#!/bin/bash

#192.168.2.222:/var/www/img/ad  --- rsync to ---> /var/www//img(192.168.1.(11|22|33))

### BEGIN INIT INFO

# Provides:          inotify_rsync

# Required-Start:    $local_fs

# Required-Stop:

# X-Start-Before:    inotifywait rsync

# Default-Start:    2 3 4 5

# Default-Stop:      0 1 6

# Short-Description: inotify_rsync script

# Description:      inotify_rsync script.

### END INIT INFO

case $1 in

start)

inotifywait --exclude ^.*\.filepart$ -mrq -e create,delete,modify,move /var/www/img/ad | while read line;

do

for ip in 192.168.1.11 192.168.1.22 192.168.1.33

do

/usr/bin/rsync --exclude=.*  --exclude=*.swp --exclude=*.filepart -avzu --progress --delete  /var/www/img/ad  root@$ip:/var/www/img/ >> /dev/null 2>&1;

done

done &

;;

stop)

pid_a=`ps -ef | grep inotifywait | grep -v grep | awk '{print $2}'`;

kill -9 $pid_a && echo "inotify stop[OK]" || echo "inotify stop[failed]";

;;

esac

只要/var/www/img/ad 文件夹下有变化(create,delete,modify,move)就同问更新的文件到远程主机对应的目录下面。

--exclude=xxx.xxx,不仅代表该目录下的这个目录,还代表了子目录。只要包含这个名字就排除。

之后便启动脚本,做个测试,可以的话就加入开机自启动(chkconfig)。



第二种利用rsync同步方法

这种方法需要区分同步端操作和被同步端操作。

同步端:

yum install rsync inotify-tools    #安装两个软件


#写一个同步脚本

vim /root/rsynccc.sh


#!/bin/bash

/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' --exclude '.*\.logs' -e modify,delete,create,attrib /var/www/apadv  | while read files

do

/bin/rsync -vzrtopg --delete --progress --password-file=/etc/rsync/rsyncd.passwd --exclude=/var/www/apadv/t/config.php  /var/www/apadv/*  [email protected]::zhang

#注意[email protected]::zhang, 这个zhang是被同步端定义的rsyncd.conf中定义的名称,相当于把zhang中定义的路径拿到来用。

#echo "${files} to ${host1} was rsynced" >>/var/log/rsync/rsync.log 2>&1

done

(备注:secrets file = /etc/rsync/rsyncd.passwd)

3.  vi  /etc/rsync/rsyncd.passwd  (注意没用户,只有密码)

123456    #把staff用户密码写入此文件


4,chmod  600  /etc/rsync/rsyncd.passwd    #必须这个权限才能读取



开启此脚本:

nohup ./rsynccc.sh&

如果有需要可以写一个检测脚本


加入开机自启:

chmod u+x  /etc/rc.d/rc.local

vim /etc/rc.d/rc.local

nohup /root/rsynccc.sh&


被同步端:

vi  /etc/rsyncd.conf

uid = root

gid = root

use chroot = no

max connections = 10

strict modes = yes

pid file = /var/log/rsync/rsyncd.pid

lock file = /var/log/rsync/rsync.lock

log file = /var/log/rsync/rsyncd.log

[zhang]    #注意这个

path = /var/www/apadv_new/

comment = web file

ignore errors

read only = no

write only = no

hosts allow = 192.168.2.22

hosts deny = *

list = false

uid = root

gid = root

auth users = staff

secrets file = /etc/rsync/rsyncd.passwd


2, vi /etc/rsync/rsyncd.passwd    (注意有用户和密码)

staff:123456


chmod 600  /etc/rsync/rsyncd.passwd    (一定注意权限600和root所属)

chown root:root  /etc/rsync/rsyncd.passwd


启动客户端:

rsync --daemon --config=/etc/rsyncd.conf


加入开机自启:

chmod u+x  /etc/rc.d/rc.local

vim /etc/rc.d/rc.local

rsync --daemon --config=/etc/rsyncd.conf

你可能感兴趣的:(inotify与rsync进行文件同步)