CentOS下使用Rsync和Crontab实现无人值守定时同步

如题实现无人值守定时同步,为员员们节省工作时间,提高工作效率,本文采用Centos系统,用到了rsync,crontab等技术。

rsync的一些特性

  1. 能更新整个目录和树和文件系统
  2. 有选择性的保持符号链链、硬链接、文件属于、权限、设备以及时间等
  3. 对于安装来说,无任何特殊权限要求
  4. 对于多个文件来说,内部流水线减少文件等待的延时
  5. 安全,能用 rsh、ssh 或直接端口做为传输端口,或者socket连接
  6. 支持匿名 rsync 同步文件,是理想的镜像工具

功能分析

  1. 配置此功能,首先明确的是,在角色上,需要服务端和客户端 (1:N)
  2. 服务端,主要负责文件的首次上传,更新操作等
  3. 客户端,会随着服务端的文件变化进行同步-(下载,更新,删除等)
  4. 在操作上,最简单的配置比例为【服务端:客户端 = 1:1】,例如,本次的实际操作中,配置了一个服务端(IP:192.168.1.119),其中的一个客户端(IP:192.168.1.121),后期添加了另一个客户端(IP:192.168.1.126)

配置操作

(1). 服务端配置

①. 安装rsync
CentOS默认安装了此软件,运行命令rsync可查看是否安装:

rsync

如果没有,使用如下命令安装:

yum install rsync

②. 进行配置文件的修改
rsync的主要有以下三个配置文件:

rsyncd.conf (主配置文件)、rsyncd.passwd (密码文件)

服务器配置文件( /etc/rsyncd.conf ),该文件默认不存在,需要创建它

touch /etc/rsyncd.passwd  #创建用户密码文件
chmod 600 rsyncd.passwd  #将rsyncd.passwd权限要设为600, 否则无法备份成功

修改rsyncd.conf
rsyncd.conf是rsync服务器主要配置文件。以下为的文件信息,可作参考或进行进一步的修改

#This is the rsync daemon configuration 

#global settings 
pid file = /var/run/rsyncd.pid

#默认端口是873,可自定义
port = 873

#指定服务端IP地址
address = 192.168.1.119

lock file = /var/run/rsyncd.lock
log file = /var/log/rsync.log
gid = root
uid = root

#module settings 

[backup]
path = /opt/lampp/htdocs/gt-store-live
use chroot = no
max connections = 15
read only = no
write only = no
list = no
ignore errors = yes
timeout = 120
auth users = root
secrets file = /etc/rsyncd.passwd

[dbbackup]
path = /home/backup/database
use chroot = no
max connections = 15
read only = no
write only = no
list = no
ignore errors = yes
timeout = 120
auth users = root
secrets file = /etc/rsyncd.passwd

设定rsyncd.passwd密码文件
密码文件格式很简单,rsyncd.passwd 的内容格式为:user:password
vim /etc/rsyncd.passwd

添加信息:root:root123

修改rsyncd.passwd属性和权限

chown root:root /etc/rsyncd.passwd  
chmod 600 /etc/rsyncd.passwd

(2). rsync服务器启动

在此,只介绍让rsync以服务器模式运行的daemon参数方式,此时为服务端操作(IP:192.168.1.119)如下依然为【root】 权限下操作

①. 以 root 身份启动rsync

/usr/bin/rsync --daemon

②. 查看相应进程

lsof -i :873

【注:】修改rsync配置后服务器端需要重启

killall rsync
rsync --daemon 
lsof -i :873

③. rsync服务器和防火墙
Linux防火墙是用iptables,所以们至少在服务器端要让你所定义的rsync服务器端口通过,客户端上也应该让通过。

iptables -A INPUT -p tcp -m state --state NEW  -m tcp --dport 873 -j ACCEPT
service iptables restart

(3). 客户端:

①. 安装 rsync:

yum install rsync

②. 配置密码文件rsyncd.passwd(服务器密码,文件位置自定义)

echo root123>rsyncd.passwd
chmod 600 rsyncd.passwd

③. 主要命令
1). 列出rsync 服务器上的所提供的同步内容

#此处需要手动输入密码
rsync --list-only 192.168.1.119::backup
rsync --list-only 192.168.1.119::dbbackup
#此处不需要输入密码
rsync --list-only --password-file=/home/backup/cron/rsyncd.passwd root@192.168.1.119::backup
rsync --list-only --password-file=/home/backup/cron/rsyncd.passwd root@192.168.1.119::dbbackup

2). 文件同步命令

#此处需要手动输入密码
rsync -avzP 192.168.1.119::backup /home/backup
#此处不需要输入密码
rsync -avzP --password-file=/home/backup/cron/rsyncd.passwd root@192.168.1.119::backup /home/backup

3). 客户端上的数据要与服务器端完全一致

#此处需要手动输入密码
rsync -avzP --delete 192.168.1.119::backup /home/backup
#此处不需要输入密码
rsync -avzP --delete --password-file=/home/backup/cron/rsyncd.passwd root@192.168.1.119::backup /home/backup

④. 定时同步无人值守:
(1). 一种方法:直接在 /etc/crontab中添加命令

vi /etc/crontab

或者通过 crontab进行设定 ,执行命令:crontab -e

*/1 * * * *  rsync -avzP --password-file=/home/backup/cron/rsyncd.passwd root@192.168.1.119::backup /home/backup

(2). 第二种方法:脚本实现

vim /etc/ftp-update-backup.sh #自定义即可

添加如下代码:

#!/bin/bash
rsync -avzP --password-file=/home/backup/cron/rsyncd.passwd root@192.168.1.119::backup /home/backup

通过crontab设定,让这个脚本每10分钟(测试)运行一次。执行命令:

*/10 * * * * /home/backup/cron/ftp-update-backup.sh

(3). 上述方法配置好后,要重启crond服务器

killall crond    #注:杀死crond服务器的进程;
ps aux |grep crond # 注:查看一下是否被杀死;
/usr/sbin/crond    #注:启动 crond 服务器;

相关文章:
Linux使用expect和rsync实现无人值守自动同步
CentOS下使用Rsync和Crontab实现无人值守定时同步
CentOS等Linux服务器配置使用Rsync同步及Crontab定时任务

发表评论