rsync linxu实时同步文件到windows
rsync 同步数据,数据的拉取和推送只能在客户端操作。
即需要在客户端执行命令,在服务端配置rsyncd.conf文件,启动rsync。
linxu实时同步文件到windows,所以客户端为 linux,服务端为 windows。
一、服务端windows
1.下载软件: cwRsyncServer
下载链接: https://files.cnblogs.com/files/yblue/cwRsyncServer_4.1.0_Installer.rar
2.安装 cwRsyncServer 软件
建议选默认路径安装,我刚开始装D盘,一直都没有成功,后来默认路径就行了。
默认路径:C:\Program Files (x86)\ICW。
装的时候有个用户账号和密码,那个设成跟你配置文件的一样,即auth users的值,secrets file中密码的值。
(windows服务器 windows server 2012 r2 安装这个软件的时候不会自动创建用户,需要去计算机添加用户,那个密码策略很麻烦,可以看这图片)
3.修改C:\Program Files (x86)\ICW\rsyncd.conf 配置文件
gid = 0
pid = 0
uid = 0
use chroot = false
strict modes = false
port = 873
max connections = 200
lock file = rsyncd.lock
log file = /cygdrive/e/rsync_config/rsyncd.logtransfer
logging = yes
hosts allow = *[server]path = /cygdrive/e/rsync_test_data
auth users = rsync
secrets file = /cygdrive/e/rsync_config/configPwd.passwd
read only = no
list = no
主要参数有:[] :模块,path:存放数据的路径,auth users:虚拟用户,secrets file:密码文件,hosts all:允许访问的IP。
详细参数可以参考这篇文章:https://www.cnblogs.com/koushuige/p/9162920.html
4.权限配置
//权限
C:\Program Files (x86)\ICW\bin\chmod.exe 600 /cygdrive/e/rsync_config/configPwd.passwd
//所有者
C:\Program Files (x86)\ICW\bin\chown.exe rsync /cygdrive/e/rsync_config/configPwd.passwd
给用户授权可能命令会失效,我试过多次都是失效,去文件那里配置权限。
4.1修改密码文件用户权限步骤如下:
这样就给rsync用户对密码文件加进行授权。
4.2 最好也修改同步文件的用户权限
比如我的path = /cygdrive/e/rsync_test_data,今天在windows系统上没配置不会报错,但是部署到windows服务器 windows server 2012 r2 的时候就报错 rsync: failed to set times on “.” (in server): Is a directory (21) rsync。
5.在服务中找到RsyncServer,启动即可
到这里windows 服务端 Rsync 配置完成。
二、客户端Linxu
1.linxu安装rsync
//yum安装rsync
yum install rsync
2.客户端只需要创建一个密码文件就行了,密码文件只需要密码,密码需要跟服务端的密码文件中的一致,并授权。
//在etc下创建文件rsync.password
touch /etc/rsync.password
//给密码文件写入密码
echo "123456">/etc/rsync.password
//查看密码文件内容(不需要)
cat /etc/rsync.password<br>//授权<br>chmod 600 /etc/rsync.password
3.使用inotify实时监控
3.1 下载安装inotify
//直接下载inotify,我是下载在/home/tools/文件夹
wget http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz
//解压
tar xf inotify-tools-3.14.tar.gz
//进入目录
cd inotify-tools-3.14
//指定参数configure,设置安装的地点
./configure --prefix=/usr/local/inotify-tools-3.14
//查看是否安装成功
make && make install
echo $?//如果返回0则好了,127的话输入ls,然后再执行echo $?
cd /usr/local/inotify-tools-3.14
//设置字符集
LANG=EN
3.2 编写inotify实时监控脚本
//创建/server/scripts目录 一般脚本放这里
mkdir /server/scripts -p
cd /server/scripts
//修改脚本文件
vim inotify.sh
3.3脚本的内容
#!/bin/sh
#para
host01=服务端IP
src=客户端需要同步的文件夹
dst=服务端模块名
user=服务端用户名
rsync_passfile=/etc/rsync.password
inotify_home=/usr/local/inotify-tools-3.14/
#judge
if [ ! -e "$src" ] \
|| [ ! -e "${rsync_passfile}" ] \
|| [ ! -e "${inotify_home}/bin/inotifywait" ] \
|| [ ! -e "/usr/bin/rsync" ] ;
then
echo "Check File and Folder"
exit 9
fi
${inotify_home}/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e close_write,delete,create,attrib $src \
| while read file
do
#rsync -avzP --delete --timeout=100 --password-file=${rsync_passfile} $src $user@$host01::$dst >/dev/null 2>&1
cd $src && rsync -aruz -R --delete ./ --timeout=100 $user@$host01::$dst --password-file=${rsync_passfile} >/dev/null 2>&1
done
exit 0
3.4执行脚本文件
//测试 执行脚本文件
sh -x inotify.sh
3.5让脚本在后台运行
//查看 inoti开头的进程
ps -ef|grep inoti
//杀死进程 xxxx就是所有inoti开头的进程的进程号
kill xxxx
//开启 inotify进程后台运行
nohup sh /server/scripts/inotify.sh &
到此客户端Linxu就配置完毕了。
三、小结
rsync实现系统间的文件同步,数据的拉取和推送只能在客户端操作,确定客户端的关键就看你数据的流向了。
网上有好多不同系统间文件同步,Linux->Linxu,Linxu->windows,windows->Linxu,windows->window,还有双向同步的(那就两边都当成服务端和客户端,两边都配),其实都差不多。
步骤大概如下:
一:服务端配置
1.服务端配置 rsync.conf文件 (具体参考上面)
2.权限配置
设置密码文件夹:chmod 600 密码文件全路径
给用户授权密码文件夹权限:chown 用户名 密码文件全路径
设置同步数据存放位置path:chmod 600 密码文件全路径 (可不授权,最好也给设置权限,不然可能会报错)
3.开启rsync
windows 开启服务 (Linxu 启动rsync:rsync --daemon)
二、客户端配置
1.配置密码文件,文件只需要服务端那边密码文件的密码
2.权限配置
设置密码文件夹:chmod 600 密码文件全路径
3.就是命令执行了,也可以写脚本运行(具体参考上面)
三、排错的逻辑
1.防火墙和selinux(记住是局域网,非局域网就域名吧,你正常查出来的IP都是本地路由分配的,别人那个IP是那边分配的)
2.查看日志文件 rsyncd.log
3.检查你部署的流程是否会有出错
想看更多精彩内容,可以关注我的博客园
我的博客园