Linux文件同步rsync

Linux下文件同步,主要是分为客户端与服务端,我的需求是 将客户端指定文件夹下的文件复制到服务端下指定的文件夹,客户端主要是传送文件,服务端接收文件。

一、服务端操作

1、安装rsync软件

yum -y install rsync

2、修改配置文件/etc/rsyncd.conf

# SYNC守护进程的用户
uid = root
# 运行RSYNC守护进程的组
gid = root
# 不使用chroot
use chroot = no
# 最大连接数是4
max connections = 4
# pid文件存放位置
pid file = /var/run/rsyncd.pid
# 锁文件存放位置
lock file = /var/run/rsync.lock
# 日志文件存放位置
log file = /var/log/rsyncd.log
#synchfile为模块名
[synchfile]
# 要同步的目录
path = /home/ftp
# 忽略无关的IO错误
ignore errors
# 允许向文件夹中写文件,必须配置,且必须为false
read only = false
# 禁止查看文件列表
list = false
# 允许访问服务的ip
# hosts allow = 192.168.1.200
# 禁止访问服务的ip
# hosts deny = 0.0.0.0/32
# 认证的用户名,系统必须存在的用户,但是密码需要在secrets file 配置,不是系统的密码。
auth users = myuser
# 认证用户密码文件,配置auth users的密码
secrets file = /etc/backserver.pas

说明:auth users不是系统中真正存在的用户,主要为同步进行认证

其中几个重要配置:

服务端同步文件夹为:/home/ftp

认证文件目录:/etc/backserver.pas

模块名:synchfile

3、创建密码文件并授权

echo "myuser:123456" > /etc/backserver.pas

chmod 600 /etc/backserver.pas

4、以守护进程方式启动rsync服务器

rsync --daemon

5、加入开机自启动

echo 'rsync --daemon --config=/etc/rsyncd.conf' >> /etc/rc.d/rc.local

二、客户端操作

1、安装rsync软件

yum -y install rsync

2、创建密码文件,用于同步时验证

echo "123456" > root/rsyncd.secrets

chmod 600 root/rsyncd.secrets

3、验证rsync是否安装成功

客户端上执行,客户端向服务端复制文件

源文件夹:/root/myfile/

目标模块:synchfile,对应服务端文件夹在配置文件中指定

rsync -vzrtopg --progress --delete --password-file=/root/rsyncd.secrets /root/myfile/ myuser@192.168.20.150::synchfile

4、安装inotify

inotiry监测客户端的文件变动,当文件发生变动时进行文件复制。

执行以下命令进行安装:

cd /usr/local/src/

wget http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz

tar zxvf inotify-tools-3.14.tar.gz

cd inotify-tools-3.14

./configure --prefix=/usr/local/inotify

make

make install

5、创建shell脚本

此shell脚本主要是监控客户端文件夹,如果文件夹中内容修改了(添加、修改、删除)能够通过inotify监控到,并通过rsync实时的同步给服务端的目录。

脚本代码:

 

#!/bin/bash

#服务端IP
host=192.168.20.150
#服务端用户
user=myuser
#目标模块
des=synchfile
#源文件
src=/root/myfile/


/usr/local/inotify/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e modify,delete,create,attrib $src | while read files 
do
/usr/bin/rsync -vzrtopg --progress --delete --password-file=/root/rsyncd.secrets $src $user@$host::$des
echo "${files} was rsynced" >>/root/logs/rsync.log 2>&1
done

 

6、给脚本增加执行权限

chmod 755 /usr/local/rsync/rsync.sh

7、运行shell脚本

sh /usr/local/rsync/rsync.sh &

8、将shell脚本加到开机启动项中

echo "setsid /usr/local/rsync/rsync.sh &" >> /etc/rc.d/rc.local

三、其它命令

在配置文件同步时遇到一些问题,解决时用到的一些命令也罗列了一下

1、检查是否安装了rsync

执行命令:rpm -qa rsync

如果有rsync相关结果,则说明已安装。

2、卸载命令

执行命令:yum remove rsync

3、查找rsync进程

netstat -ntap | grep rsync

4、查看文件权限

ll /etc/rc.d/rc.local

5、添加执行权限

chmod 755 /etc/rc.d/rc.local

6、客户端查看服务器端rsync软件是否启动

telnet 192.168.20.150 873

四、遇到的问题以及解决思路

1、在客户端执行同步命令时不生效,报错

我当时只是查看客户端的错误信息,到网上查,查了好久也没头绪。

最终解决办法:查看服务端的日志文件,很容易能查找到根本问题,是文件权限的问题or目录的问题or其它问题

找到解决问题的办法很关键!!!

2、运行shell脚本时,不可执行

原因:没有给脚本分配执行权限

3、开机不自动 启动(客户端&服务端)

查看/etc/rc.d/rc.local的文件权限,发现没有可执行权限,给其分配权限

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值