• inotify+rsync实现linux文件批量更新


    ---恢复内容开始---

    公司网站一台服务器顶不住了,就打算用负载均衡,现在是3台机器一起运行网站,之前做的批量更新一直没写日志,现在补上,也是借鉴了不少博客

    这里不想编译安装就直接yum了

    yum install rsync

    //建立配置文件
    #touch /etc/rsyncd.conf

    //建立帐号配置文件
    #touch /etc/rsyncd.pwd

    //配置文件只能自己看
    #chmod 600 /etc/rsyncd.conf

    //帐号配置文件只能自己看
    #chmod 600 /etc/rsyncd.pwd

    # vi /etc/rsyncd.conf

    uid=root
    gid=root
    max connections=4
    use chroot=yes
    log file=/var/log/rsyncd.log
    pid file=/var/run/rsyncd.pid
    lock file=/var/run/rsyncd.lock
    #auth users=root
    secrets file=/etc/rsyncd.pwd
    [web]
    path = /home/wwwroot/web1/
    comment = welcome to 0.1
    ignore errors
    read only = no
    list = yes
    auth users = www
    

    vi /etc/rsyncd.pwd

    文件内容如下:

    www:xxxxxxxxxxxxxxxxxxxxxx
    

      

     启动 rsync server (会自动加载配置文件/etc/rsyncd.conf) 
    #rsync --daemon

    如果开启了iptables,要先打开 tcp 873 的 input(入站)规则

    设置密码文件
    #echo "xxxxxxxxxxxxxxx" >/script/rsync_remote.pwd



    密码文件只能自己看
    #chmod 600  /script/rsync_remote.pwd

     安装inotifywait

    [root@nginx rsync]# cd /usr/src/  
    [root@nginx src]# wget http://cloud.github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz  
    [root@nginx src]# tar zxvf inotify-tools-3.14.tar.gz  
    [root@nginx src]# cd inotify-tools-3.14  
    [root@nginx inotify-tools-3.14]# ./configure --prefix=/usr/local/inotify  
    [root@nginx inotify-tools-3.14]# make  
    [root@nginx inotify-tools-3.14]# make install

    下面是我用来更新执行的脚本

    /script/inotify_rsync.sh
    注释:
    host1 host2 为2台需要同步的服务器,如果有更多的服务器需要同步可以在下面增加
    ------------------------------------------------------------------------
    #!/bin/bash
    if [ "$1" != "" ] ;
    then
            echo "run /etc/init.d/inotify start"
            exit 1
    fi
    host1=192.168.0.22
    host2=192.168.0.23
    src=/home/wwwroot/web1/
    src2="`echo $src | sed -e 's///+++/g'`"
    des=web
    user=www
    rsync_exclude_file=/script/rsync_skip.setup
    password_file=/script/rsync_remote.pwd
    
    do_rsync()
    {
            files=$1
            user=$2
            host=$3
            des_url=$4
            rsync_exclude_file=$5
            password_file=$6
            /usr/bin/rsync  --delete -zrtopg --exclude-from=${rsync_exclude_file}  --progress --password-file=${password_file} ${files} $user@$host::$des_url
    }
    
    
    
    #echo "src2:$src2"
    /usr/local/inotify/bin/inotifywait --excludei '(.svn|.swp|.swo|Runtime)' -mrq --timefmt '%d/%m/%y %H:%M' --format '%w::%f' -e close_write,delete,create,attrib $src 
    | while read filess
    do
            files=`echo "$filess" | awk -F:: '{print $1}'`
            file=`echo "$filess" | awk -F:: '{print $2}'`
            des_dir=`echo "$files" | sed -e 's///+++/g' -e "s/${src2}///g" -e 's/+++///g'`
            des_url="${des}${des_dir}"
            do_rsync "$files" "$user" "$host1" "$des_url" "$rsync_exclude_file" "$password_file"
            do_rsync "$files" "$user" "$host2" "$des_url" "$rsync_exclude_file" "$password_file"
            echo "`date` dir:${files} , file:${file}  was rsync to ${host1},${host2}/${des_url}" >> /home/rsync.log
    done
    ----------------------------------------------------------------------------------------------
    /etc/init.d/inotify
    
    
    #! /bin/sh
    
    ### BEGIN INIT INFO
    # Provides:          inotify
    # Required-Start:    $remote_fs $network
    # Required-Stop:     $remote_fs $network
    # Default-Start:     2 3 4 5
    # Default-Stop:      0 1 6
    # Short-Description: starts inotify
    # Description:       starts the PHP FastCGI Process Manager daemon
    ### END INIT INFO
    
    case "$1" in
            start)
                    echo -n "Starting inotify "
    
                    /script/inotify_rsync.sh&
    
                    if [ "$?" != 0 ] ; then
                            echo " failed"
                            exit 1
                    fi
                    sleep 2
                    if [ "`ps aux | grep inotifywait | wc -l`" -gt 1 ] ;
                    then
                            echo " done"
                    else
                            echo " failed"
                            exit 1
                    fi
    
            ;;
      stop)
                    echo -n "Gracefully shutting down inotify"
    
    
                    killall inotifywait
                    killall inotify_rsync.sh
                    sleep 2
                    if [ "`ps aux | grep inotifywait | wc -l`" -gt 1 ] ;
                    then
                            echo " failed"
                            exit 1
                    else
                            echo " done"
                            exit 1
                    fi
            ;;
    
      restart)
         $0 stop
         $0 start
       ;;
    
       *)
         echo "Usage: $0 {start|stop|restart}"
        exit 1 
       ;;
    esac

    为了方便,在/etc/init.d/里加上一个启动项inotify

    #! /bin/sh
    
    ### BEGIN INIT INFO
    # Provides:          inotify
    # Required-Start:    $remote_fs $network
    # Required-Stop:     $remote_fs $network
    # Default-Start:     2 3 4 5
    # Default-Stop:      0 1 6
    # Short-Description: starts inotify
    # Description:       starts the PHP FastCGI Process Manager daemon
    ### END INIT INFO
    
    
    
    
    
    case "$1" in
            start)
                    echo -n "Starting inotify "
    
                    /script/inotify_rsync.sh&
    
                    if [ "$?" != 0 ] ; then
                            echo " failed"
                            exit 1
                    fi
                    sleep 2
                    if [ "`ps aux | grep inotifywait | wc -l`" -gt 1 ] ;
                    then
                            echo " done"
                    else
                            echo " failed"
                            exit 1
                    fi
    
            ;;
    
            stop)
                    echo -n "Gracefully shutting down inotify"
                    echo -n "Gracefully shutting down inotify"
    
    
                    killall inotifywait
                    killall inotify_rsync.sh
                    sleep 2
                    if [ "`ps aux | grep inotifywait | wc -l`" -gt 1 ] ;
                    then
                            echo " failed"
                            exit 1
                    else
                            echo " done"
                            exit 1
                    fi
            ;;
    
    
            restart)
                    $0 stop
                    $0 start
            ;;
    
    
            *)
                    echo "Usage: $0 {start|stop|restart}"
                    exit 1
            ;;
    
    esac
    

      这样通过/etc/init.d/inotify start  stop来开启关闭同步

  • 相关阅读:
    Linux中将两块新硬盘合并成一个,挂载到/data目录下
    linux将硬盘格式化为xfs文件系统
    nginx配置文件
    centos 添加新硬盘,lvm对根目录扩容
    centos7重新调整分区大小
    Linux 一种调用蜂鸣器的方法
    mybatis中 keyProperty="id" 的作用
    MySQL实战45讲
    常用正则表达式最强整理(速查手册)
    linux下nacos的1.1.3版本集群部署
  • 原文地址:https://www.cnblogs.com/yubestman/p/4301436.html
Copyright © 2020-2023  润新知