SuSE Linux下 rsync+inotify实现文件自动同

2020-11-14  本文已影响0人  sunland_0416

SuSE Linux下 rsync+inotify实现文件自动同步(一)
SuSE Linux下 rsync+inotify实现文件自动同步(二)
上面两篇文章基本实现了rsync和inotify的基本功能
下面是来看看如何停止inotify

ps -ef|grep rsync|grep -v grep|grep -v daemon

可以看到有几个进程,杀死这几个进程PID即可停止inotify

同理可以杀死rsync进程来停止自定义配置文件的rsync服务。
如果是用默认/etc/rsync.conf和/etc/rsync.secrets的还可以用service start/stop/restart rsyncd命令来实现rsync服务的启动/停止/重启

上面都是一个客户端,一个服务端,如果有多个服务端,且服务端路径一致则inotify-tools的脚本可以写在循环里,(每个服务端的rsync配置是一样的)

#!/bin/bash
host=192.168.1.170
des_ip="192.168.166 192.168.165 192.168.164"
#下面的/不要忘记
src=/home/test/rsync/ 
des=web
passwd=/home/test/rsync.passwd
log=/home/test/rsyncd.log
user=root

/home/test/inotify/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w %f %e' -e modify,delete,attrib $src |while read files
do
    for ip in $des_ip
    do
        /usr/bin/rsync -vzrtopg --delete --ignore-errors --password-file=$passwd $src $user@$ip::$des
        echo "${files} was rsynced">>$log 2>&1
    done
done

终极目标,如果src也是多个呢?即多目录多ip怎么实现同步?可以写多个inotify脚本,也可以直接写个shell函数,然后调用
下面的例子会把 170上的/home/test1/rsync和/home/test2/rsync 同步到164 165 166三个服务器的对应目录
服务端--目标服务器上的rsync.conf配置文件如下

uid=root
gid=root
use chroot=no
max connections=10
strict modes=yes
pid file=/var/run/rsyncd.pid
lock file=/var/run/rsync.lock
log file=/home/test/rsyncd.log

ignore errors
read only=no
write only=no
hosts allow=192.168.166 192.168.165 192.168.164
host deny =*
list=false
auth users=root
secrets file=/home/test/rsync.passwd

[web1]
path=/home/test1/rsync
comment=web file
[web2]
path=/home/test2/rsync
comment=web file

客户端--源服务器上inotify的脚本如下

#!/bin/bash
host=192.168.1.170
des_ip="192.168.166 192.168.165 192.168.164"
#下面的/不要忘记;另外src跟des一定要匹配
src="/home/test1/rsync/ /home/test2/rsync/"
des="web1 web2"
passwd=/home/test/rsync.passwd
log=/home/test/rsyncd.log
user=root

fun_inotify(){
    /home/test/inotify/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w %f %e' -e modify,delete,attrib $1 |while read files
    do
        for ip in $des_ip
        do
            /usr/bin/rsync -vzrtopg --delete --ignore-errors --password-file=$passwd $1 $user@$ip::$2
            echo "${files} was rsynced">>$log 2>&1
        done
    done
}

src_list =($src)
src_len=${#src_list[@]}
des_list=($des)
des_len=${#des_list[@]}

if [ $src_len == $des_len ] ; then 
    for (( i = 0; i< src_len; i++))
        do
            fun_inotify ${src_list [i]} ${des_list[i]} &
        done
else
    echo "inotify config files wrong, src length is not equal des" >>$log 2>&1
fi

注意
1.如果使用默认的873端口必须是root用户,如果更改端口可以是非root用户
2.rsync+inotifywait的同步模式是阻塞模式,一定放到后台执行,不要影响其他任务执行

上一篇下一篇

猜你喜欢

热点阅读