linux 命令rsync+crontab实现自动同步

linux 命令rsync+crontab实现自动同步,这个技术现在已经用得很广泛了,比起第三方的软件要可靠好使,所以得到系统管理员的广泛应用;在此,我给大伙来分享一下;请指教.

首先,我们来了解一下这个命令:

rsync命令格式:rsync [option] 源路径 目标路径;

其中:

[option]:

a:使用archive模式,等于-rlptgoD,即保持原有的文件权限;

z:表示传输时压缩数据;

v:显示到屏幕中;

e:使用远程shell程序(可以使用rsh或ssh;

--delete:精确保存副本,源主机删除的文件,目标主机也会同步删除;

--include=PATTERN:不排除符合PATTERN的文件或目录;

--exclude=PATTERN:排除所有符合PATTERN的文件或目录;

--password-file:指定用于rsync服务器的用户验证密码;

源路径和目标路径可以使用如下格式:

rsync://[USER@]Host[:Port]/Path #--rsync服务器路径;

[USER@]Host::Path   #--rsync服务器的另一种表示形式;

[USER@]Host:Path#--远程路径;

LocalPath   #--本地路径;

知道上述命令的基本格式了吗?

下面我们来讲安装rsyn命令;

[root@dbserver ~]#yum list rsync*

Loaded plugins: fastestmirror, refresh-packagekit, security

Loading mirror speeds from cached hostfile

 * rpmforge: mirrors.neusoft.edu.cn

Installed Packages

rsync.i686  3.0.6-9.el6   @anaconda-CentOS-201207051201.i386/6.3

[root@dbserver ~]#yum -y install rsync*

前面是查看rsync RPM包,后面是安装rsync这个命令;

安装完后,我们便可以来配置rsync服务器与客服端了;

实例:

A服务器:192.168.1.213

B客户端:192.168.1.210

首先人们配置服务器,look,

在配置服务器之前要先生成密钥,ssh-keygen -t rsa,生成密钥如下:

[root@masternagios .ssh]# ls

id_rsa  id_rsa.pub

[root@masternagios .ssh]#  scp id_rsa_pub root@192.168.1.210:/root/.ssh/authorized_keys

在客户端也要如下操作:

[root@masternagios .ssh]# ssh-keygen -t rsa

[root@masternagios .ssh]# ls

id_rsa  id_rsa.pub  authorized_keys(213的公钥)

[root@masternagios.ssh]#

scp id_rsa_pub root@192.168.1.213:/root/.ssh/authorized_keys

这样两台机可以无密码SSH登陆,以便后面我们同步方便;当然,不要上述的操作也能实现;那么如下操作:

服务端:

vi /etc/sery.pass  权限:600(chmod 600 /etc/sery.pass)

root:123456

客服端:

vi /etc/sery_client.pass  权限:600(chmod 600 /etc/sery_client.pass)

123456

生成的这两件文件后面有用处的;

然后新建配置文件vi /etc/rsyncd.conf,内容如下图示:

解析如下:

uid = root           #root用户访问(我这里用ROOT用户,也可以用其他新建的用户)

gid = root           #root组用户访问

use chroot = no      #不能使用chroot

max connections = 10  #最大连接数

list = yes           #允许列出文件清单

pid file = /var/run/rsyncd.pid

lock file = /var/run/rsyncd.lock

log file = /var/log/rsyncd.log

hosts allow  = 192.168.1.2      #只允许这个主机访问

[data] #发布项(注意这个命名)

path = /webapps/IDManage         #发布的路径

ignore errors

read only = yes            #只读

auth users = root                #认证用户为root

secrets file = /etc/sery.pass    #密码文件

然后我们来启动:

[root@masternagios ~]# rsync –daemon –config=/etc/rsyncd.conf

[root@masternagios ~]# ps -ef |grep rsync

root     21359     1  0 Aug24 ?        00:00:00 rsync --daemon --     config=/etc/rsyncd.conf

root     24018 23885  0 10:38 pts/0    00:00:00 grep rsync

[root@masternagios ~]#lsof -i:873

COMMAND   PID USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME

rsync   21359 root    4u  IPv4 1558266      0t0  TCP *:rsync (LISTEN)

rsync   21359 root    5u  IPv6 1558267      0t0  TCP *:rsync (LISTEN)

然后在客户端测试:

[root@dbserver ~]# telnet 192.168.1.213 873

Trying 192.168.1.213...

Connected to 192.168.1.213.

Escape character is '^]'.

@RSYNCD: 30.0

^]

telnet> q

Connection closed.

说明网络端口开放,没有问题;通常在这配置时会发现一些问题,比如报错(111)–说明服务器端口未开启,就检查一下rsync服务有没有开启;

报错(1503)(1536)–说明无 [data] #发布项(注意这个命名),这里命令一定要对应上同步::[data];

我们再来把服务端rsync加自动启动;

echo "/usr/bin/rsync --daemon --config=/etc/rsyncd.conf" >>/etc/rc.local

配置客户端;

客户端只要安装rsync这个命令便可以实现,所以,我们来测试同步实现;

[root@dbserver ~]#rsync -aSvH /webapps/IDManage/ root@192.168.1.213::data --password-file=/etc/sery_client.pass

可以看到:

命令执行成功;说明服务端与客户端都没有问题;

如何自实rsync客户端自动与rsync服务器端同步呢?这里我们用到计划任务命令:crontab;

首先,我们来做一个shell脚本,

[root@dbserver ~]#vi /tmp/rsyncd.sh

#!/bin/bash

rsync -aSvH /webapps/IDManage/ root@192.168.1.213::data --password-file=/etc/sery_client.pass

wq!   ##保存退出

[root@dbserver ~]#crontab -e

*/5 * * * * sh /tmp/rsyncd.sh #第5分钟执行一次同步;

wq!   ##保存退出

看了,到此分享linux 命令rsync+crontab实现自动同步,已经结束;总结一点:rsync命令格式一定要知道:rsync [option] 源路径目标路径,目标路径的格式有几种,大家只要记得一两种便可以了;

文章目录
,