注:红色为注释说明的内容,绿色为示例内容,请以项目实际情况修改操作
rsync有六种不同的工作模式:
1. 拷贝本地文件;当SRC和DES路径信息都不包含有单个冒号":"分隔符时就启动这种工作模式。
2.使用一个远程shell程序(如rsh、ssh)来实现将本地机器的内容拷贝到远程机器。当DST路径地址包含单个冒号":"分隔符时启动该模式。
3.使用一个远程shell程序(如rsh、ssh)来实现将远程机器的内容拷贝到本地机器。当SRC地址路径包含单个冒号":"分隔符时启动该模式。
4. 从远程rsync服务器中拷贝文件到本地机。当SRC路径信息包含"::"分隔符时启动该模式。
5. 从本地机器拷贝文件到远程rsync服务器中。当DST路径信息包含"::"分隔符时启动该模式。
6. 列远程机的文件列表。这类似于rsync传输,不过只要在命令中省略掉本地机信息即可。
-a 以archive模式操作、复制目录、符号连接 相当于-rlptgoD
rsync中的参数
-r 是递归
-l 是链接文件,意思是拷贝链接文件;
-p 表示保持文件原有权限;
-t 保持文件原有时间;
-g 保持文件原有用户组;
-o 保持文件原有属主;
-D 相当于块设备文件;
-z 传输时压缩;
-P 传输进度;
-v 传输时的进度等信息,和-P有点关系,自己试试。可以看文档;
-e ssh的参数建立起加密的连接。
-u只进行更新,防止本地新文件被重写,注意两者机器的时钟的同时
--progress是指显示出详细的进度情况
--delete是指如果服务器端删除了这一文件,那么客户端也相应把文件删除,保持真正的一致
--password-file=/password/path/file来指定密码文件,这样就可以在脚本中使用而无需交互式地输入验证密码了,这里需要注意的是这份密码文件权限属性要设得只有属主可读。
#yum install rsync xinetd –y
#cat /etc/rsyncd.conf
uid = root
gid = root
use chroot = no
max connections = 100
timeout = 600
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock
log file = /var/log/rsyncd.log
##以上为全局配置,下面为一个条目,可根据需求添加多个条目
[tomcat_project]
path = /opt/appl/ project/
##应用用户组id,和用户id
uid = 1501
gid = 1500
read only = yes
list = yes
##允许使用该条目进行同步的主机地址,加入备机和预生产主机地址
hosts allow = 172.16.0.101,172.26.0.100
auth users = rsync
secrets file = /etc/rsyncd.pwd
#cat /etc/rsyncd.pwd
rsync:123456
##cat /etc/xinetd.d/rsync
service rsync
{
##把这里的yes 改为 no
disable = no
flags = IPv6
socket_type = stream
wait = no
user = root
server = /usr/bin/rsync
server_args = --daemon
log_on_failure += USERID
}
##启动rsync服务
#service xinetd start
##验证是否启动成功
#netstat –anptl | grep 873
-A INPUT -p tcp -m state --state NEW -m tcp --dport 873 -j ACCEPT
##在/etc/sysconfig/iptables加入以上行
#service iptables restart
#cat >> /etc/hosts.allow <<EOF
##这里的地址是同步端的
rsync:172.16.0.101:allow
EOF
#mkdir -p /opt/appl/assist/rsync
#mkdir –p /var/log/rsync
#cat rsync-172.16.0.100_project.sh
#!/bin/sh
LOG_FILE=/var/log/rsync/rsync_172.16.0.100_project_$(date +%Y-%m-%d)
loginfo()
{
echo "$(date "+%Y-%m-%d_%H:%M") [ANIHC SAYS] $1" >>$LOG_FILE
}
##For project
loginfo "==========Synchronizing=========="
loginfo "Source directory project..."
loginfo "Destination directory is /opt/appl/project"
/usr/bin/rsync -arP --delete --exclude-from=/opt/appl/assist/rsync/exclude_list_project --password-file=/etc/rsyncd.pwd_project rsync@172.16.0.100::tomcat_project /opt/appl/project >>$LOG_FILE
loginfo "==========Synchronization done.=========="
#cat /etc/rsyncd.pwd_project
##这里的密码和服务端的/etc/rsyncd.pwd中的密码一样
123456
##cat /opt/appl/assist/rsync/exclude_list_project
*.gz
*.tgz
*.zip
*.log
*.out
*.bak
*.tmp
log/*
logs/*
tmp/*
temp/*
##以上均为常规性同步排除,可以添加指定行排除文件
#cd /opt/appl/assist/rsync
##后台执行脚本,并重定向输出到nohup.out文件
#nohup ./ rsync-172.16.0.100_project.sh &
##执行后检查/opt/appl 目录下是否已经有project同步过来,如果没有查看nohup.out定位错误
#crontab –l
00 01 * * * /opt/appl/assist/rsync/rsync-172.16.0.100_project.sh > /dev/null 2>&1