Linux下rsync同步服务安装

安装配置

1、拷贝配置文件到/etc/rsyncd.conf

cp /usr/share/doc/rsync/examples/rsyncd.conf /etc/rsyncd.conf

2、打开配置文件

vim /etc/rsyncd.conf 

3、打开后需要去掉注释的语句

  • 设置密码文件位置:
    secrets file = /etc/rsyncd.secrets
  • rsync进程启动位置:
    pid file = /var/run/rsyncd.pid
  • 日志文件位置:
    log file = /var/log/rsyncd (该文件需要手动创建)
  • 修改rsync的同步位置:
    path = /home/test

4、编辑密码

vim /etc/rsyncd.secrets      
root:123456

5、设置启动方式

vim /etc/init.d/rsync        
RSYNC_ENABLE 原值为false 改为true
Vim /etc/default/rsync       
RSYNC_ENABLE 原值为false 改为true

6、重启rsync服务

/etc/init.d/rsync restart        

7、设置定时任务

vim /etc/crontab            
* * * * * root rsync -avz --delete  root@192.168.1.11::ftp /home/test/

避免crontab同时执行多个rsync脚本的方法

如果某脚本要跑30分钟,可以在crontab里把脚本间隔设为至少一小时来避免冲突。

而比较糟的情况可能该脚本在执行周期内没完成,接着第二个脚本又开始跑了。如何确保只有一个脚本实例运行? \
linux下面:flock \
help显示如下:

flock (util-linux 2.13-pre7)
Usage: flock [-sxun][-w #] fd#
       flock [-sxon][-w #] file [-c] command...
  -s  --shared     Get a shared lock
  -x  --exclusive  Get an exclusive lock
  -u  --unlock     Remove a lock
  -n  --nonblock   Fail rather than wait
  -w  --timeout    Wait for a limited amount of time
  -o  --close      Close file descriptor before running command
  -c  --command    Run a single command string through the shell
  -h  --help       Display this text
  -V  --version    Display version

比如在rsync定时同步某文件夹的时候,可能担心上一次任务还没执行完,下一次就开始了。于是可以采用如下方式:

1 * * * * flock -xn /var/run/rsync.lock -c 'rsync -avz --delete   root@192.168.1.11::ftp /home/samba/share'

对照usage,x创建一个独享锁,n是如果已存在就退出,然后一个lock文件,c是shell命令,具体内容就是rsync。 \
注意点:我们需要自己创建rsync.lock文件:touch /var/run/rsync.lock

无需密码通过ssh执行rsync来同步文件的方法

1.生成密匙

cd ~/.ssh/
ssh-keygen
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
# 当提示输入密码时,只需敲两次回车键,不输入其他字符

2.将公匙拷贝至远程主机

  • 接下来,执行ssh-copy-id将通过上面生成的公匙拷贝至远程主机。
ssh-copy-id -i ~/.ssh/id_rsa.pub 192.168.200.10
# 按照提示输入远程主机帐户和密码,然后公匙自动拷贝至远程主机。

3.无需密码执行rsync

  • 现在,你可以不需要密码就可以ssh连接到远程主机。重新来执行之前rsync,现在应该就不会提示输入密码了。
rsync -avz -e ssh  root@192.168.200.10:/data/    /data/
# 把远端数据同步至本地/data下面