美文网首页
SuSE Linux下 rsync+inotify实现文件自动同

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

作者: sunland_0416 | 来源:发表于2020-11-14 07:57 被阅读0次

    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的同步模式是阻塞模式,一定放到后台执行,不要影响其他任务执行

    相关文章

      网友评论

          本文标题:SuSE Linux下 rsync+inotify实现文件自动同

          本文链接:https://www.haomeiwen.com/subject/vufbbktx.html