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就不详述

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

/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} [email protected]$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

---恢复内容结束---

时间: 2024-10-16 01:38:59

inotify+rsync实现linux文件批量更新的相关文章

用ftp命令实现主机文件批量更新

我们的主机环境是windows 2003,平时程序员访问都喜欢用远程桌面.简单快捷直观.不过我比较喜欢在本地用vim和命令行,这样编辑修改不需要受网络影响. 这种情况下,我本地调试的程序,要经常更新到主机上去.我的方法是: 在本地建一个bat文件,内容如: ftp -s:r.txt 而r.txt的内容如下: open xxx(远程主机名或IP地址) xxx(ftp用户名) xxx(ftp密码) put XXX put XXX bye 这样,要更新什么文件,就编辑r.txt文件内容,然后运行前面那

Inotify+Rsync实时同步文件

一.网络拓补图: 原文地址:http://blog.51cto.com/hbgslz/2064576

【转帖】Linux文件夹对比并提取的差分文件技巧-rsync的妙用

Linux文件夹对比并提取的差分文件技巧-rsync的妙用 [日期:2016-02-13] 来源:oschina.net  作者:mengshuai [字体:大 中 小] https://www.linuxidc.com/Linux/2016-02/128307.htm 早上刚百度到的 一会儿 到公司 试试 需求 最近团队正在开发一个版本对比工具,要求是把A1文件夹与A2对比,将A2中的增量部分,输出到update文件夹中,生成增量升级包/差分包. 方案研究 实现该功能的第一反应是,分别遍历2个

Zabbix监控系列之-Rsync+Inotify实现文件同步更新(无防火墙版)

Rsync+inotify实现文件同步更新(无防火墙版) 目录 说明:... 2 准备工作:关闭服务器的防火墙... 2 关闭防火墙firewall2 禁止开机启动防火墙... 2 编写脚本"shut-firewall.sh". 2 发布服务器配置rsync:192.168.171.128. 2 安装配置Rsync. 2 配置rsyncd.conf文件... 2 创建认证文件:/etc/rsyncd.secrets. 3 设置文件权限... 3 启动rsync服务... 4 关闭rsy

【转】linux批量更新文件内容+【原创】转义时的问题

程序开发中,可能你会经常遇到批量替换文件内容的情况,如果你使用的是linux,那么恭喜你,你可以使用一下三种办法进行查找替换. 方法一: find -name 'file.log' | xargs perl -pi -e 's|string1|string2|g' 这里使用了perl语言,使用-e加上一段代码,从而批量地将当前目录及所有子目录下的file.log文件中的string1替换成了string2 string支持正则表达式 方法二: sed -i "s/string1/string2/

linux下rsync+inotify实现服务器之间文件实时同步

先介绍一下rsync与inotify. 1.rsync 与传统的cp.tar备份方式相比,rsync具有安全性高.备份迅速.支持增量备份等优点,通过rsync可以解决对实时性要求不高的数据备份需求,例如定期的备份文件服务器数据到远端服务器,对本地磁盘定期做数据镜像等.随着应用系统规模的不断扩大,对数据的安全性和可靠性也提出的更好的要求,rsync在高端业务系统中也逐渐暴露出了很多不足,首先,rsync同步数据时,需要扫描所有文件后进行比对,进行差量传输.如果文件数量达到了百万甚至千万量级,扫描所

linux inotify+rsync

一.系统环境: centos 6.5_64 更新源服务器:192.168.10.11 目的服务器:192.168.10.10 二.目的服务器配置:192.168.10.10 (rsync服务端): 1.检查rsync是否安装 rpm -qa|grep rsync 如果没有发装,执以下命令进行安装 yum -y install rsync 2.定义rsync配置文件/etc/rsyncd.conf 192.168.10.11: cat >> /etc/rsyncd.conf << E

烂泥:rsync与inotify集成实现数据实时同步更新

本文首发于烂泥行天下. 上篇文章我们介绍了如何使用rsync同步文件,这篇文章我们再来介绍下,如何把rsync与inotify集成实现数据的实时同步. 要达到这个目的,我们需要分以下几个步骤: 1.rsync的优点与不足 2.inotify是什么 3.检测OS是否支持inotify 4.inotify相关参数详解 5.inotify监控的文件事件类似 6.inotify-tools是什么 7.安装inotify-tools 8.inotifywait使用详解 9.inotifywatch使用详解

linux 实现inotify+rsync实时同步系统

1.检测分发服务器系统是否满足需求,要求内核大于2.3 uname -r #查看系统内核 ll /proc/sys/fs/inotify/ 如图则满足需求. 2.在分发服务器下载最新版并编译安装 cd #回到用户目录 wget http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz #下载最新版 tar zxvf inotify-tools-3.14.tar.gz #解压到当前目录 cd inot