运维工作中常用到的几个rsync同步命令
作为一个运维工程师,经常可能会面对几十台、几百台甚至上千台服务器,除了批量操作外,环境同步、数据同步也是必不可少的技能。
说到“同步”,不得不提的利器就是rsync。
下面结合本人近几年运维工作中对这一工具使用的经验,简单在此梳理下:
rsync不但可以在本机进行文件同步,也可以作为远程同步工具。
rsync+inotify实时同步方案部署,请参考:http://www.cnblogs.com/kevingrace/p/6001252.html
rsync同步命令中常用的几个参数说明:
-a, --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD
-v, --verbose 详细模式输出
-p, --perms 保持文件权限
-g, --group 保持文件属组信息
-o, --owner 保持文件属主信息
-r, --recursive 对子目录以递归模式处理。同步目录的时候要加上这个参数
-l, --links 保留软链结,加上这个参数,同步过来的文件会保持之前的软链接属性不变
-H, --hard-links 保留硬链结
-e, --rsh=COMMAND 指定使用rsh、ssh方式进行数据同步
-z, --compress 对备份的文件在传输时进行压缩处理
--stats 给出某些文件的传输状态
--progress 打印同步的过程
--timeout=TIME 同步过程中,IP超时时间,单位为秒
--delete 删除那些目标目录中有而源目录中没有的多余文件。通常是在同步之前先将目标目录中的文件删除,然后再将源目录中的文件同步过去。
--delete-before 在同步操作之前做比较,删除那些目标目录中有而源目录中没有的多余文件
--delete-after 在同步操作之后做比较,删除那些目标目录中有而源目录中没有的多余文件
--delete-excluded 删除目标目录中那些被该选项指定排除的文件
--ignore-errors 即使出现IO错误也进行删除,忽略错误
--exclude 指定同步时需要过滤掉的文件或子目录(即不需要同步过去的),后面直接跟不需要同步的单个文件名或子目录(不需要跟路径) ,过滤多个文件或子目录,就使用多个--exclude
--exclude-from 指定同步时需要过滤掉的文件或子目录,后面跟文件(比如/root/exclue.txt),然后将不需要同步的文件和子目录放到/root/exclue.txt下。
--version 打印版本信息
--port=PORT 指定其他的rsync服务端口
--log-format=formAT 指定日志文件格式
--password-file=FILE 从FILE中得到密码
--bwlimit=KBPS 限制I/O带宽,KBytes per second
通常用到的rsync同步命令,如下:
25791是ssh端口
[root@bastion-IDC ~]# rsycn -e "ssh -p 25791" -avpgolr php5.5.1 192.168.1.22:/Data/app/
rsync如何实现同步目标路径下的目录,不同步路径下的文件 ,只想同步目录结构
[root@bastion-IDC ~]# rsync -av --delete -f '+ */' -f '- *' SRC/ DEST/
rsync在远程同步的时候,删除文件:
只要在命令参数那边添加--delete,如下
[root@bastion-IDC ~]# /usr/bin/rsync -vlzrtogp --progress --delete root@192.168.1.120::test --password-file=/root/192.168.1.115 /root/2013/
但是这个--delete加上去就是一个危险的命令,因为它是在同步之前先将目标目录中的文件删除,然后再将源目录中的文件同步过去。
如果目标目录比较大,在删除过程中出现宕机事故就不好了。所以最好还是用--delete-before或--delete-after比较温柔点,靠谱点。
------------------------------------------------------------------------------
rsync远程拷贝的时候,过滤某些某个文件或多个文件就用“--exclude 文件名”
要是过滤多个文件或子目录,就把过滤的文件或目录名的关键字放在一个文件里,如下的exclude_file文件
然后使用--exclude-from exclude—-file文件进行过滤
[root@bastion-IDC ~]# cat /root/lxp/exclude_file 【即rsync同步的时候,过滤掉含有下面字样名的文件】
.svn
.git
.DS_Store
*.sql
*.bak
.project
main.php
environment.php
/main/upload 【这个过滤的是rsync同步目录下的main/upload目录】
/main/temp
fangff 【过滤的目录】
hqtime 【过滤的目录】
apiConfig.php
consoleConfig.php
tpl_c
consoleConfig.php
[root@bastion-IDC ~]# cat rsync_code.sh 【提前做本机与192.168.1.57的ssh无密码登陆的信任关系】
#!/bin/sh
EXCLUDE_FILE="/root/lxp/exclude_file"
/usr/bin/rsync -avpgolr -e "ssh -p 25791" --exclude-from ${EXCLUDE_FILE} /var/www/vhosts/www.wangshibo.com/httpdocs/ root@192.168.1.57:/var/www/vhosts/www.wangshibo.com/httpdocs/
/usr/bin/rsync -avpgolr -e "ssh -p 25791" --exclude-from ${EXCLUDE_FILE} /var/www/vhosts/fanghu.xqshijie.com/httpdocs/ root@192.168.1.57:/var/www/vhosts/fanghu.xqshijie.com/httpdocs/
/usr/bin/rsync -avpgolr -e "ssh -p 25791" --exclude-from ${EXCLUDE_FILE} /Data/fanghu_temp/ root@192.168.1.57:/Data/fanghu_temp/
1)排除单独的文件夹和文件
比如要排除sources文件夹,我们可以添加 '--exclude' 选项:
--exclude 'sources'
命令是这样的:
[root@bastion-IDC ~]# rsync -e 'ssh -p 30000' -avl --delete --stats --progress --exclude 'sources' demo@192.168.1.120:/home/demo /backup/
比如要排除 "public_html" 文件夹下的 "database.txt" 文件:
--exclude 'public_html/database.txt'
命令是这样的:
[root@bastion-IDC ~]# rsync -e 'ssh -p 30000' -avl --delete --stats --progress --exclude 'sources' --exclude 'public_html/database.txt' demo@192.168.1.120:/home/demo /backup/
比如排除掉同步目录中的类似*-prod.properties文件(比如global-prod.properties等)
命令是这样的:
[root@bastion-IDC ~]# /usr/bin/rsync -av -e "/usr/bin/ssh -p25791" --rsync-path="/usr/bin/rsync" --exclude=*-prod.properties --progress /opt/tomcat/webapps/awaken_beta/ 192.168.1.20:/Data/app/apache-tomcat-8/awakenweb/ROOT/
2)使用 '--exclude-from' 排除多个文件夹和文件
建立文件:
[root@bastion-IDC ~]# touch /home/backup/exclude.txt
在里面定义要排除的文件夹和文件
[root@bastion-IDC ~]# vim /home/backup/exclude.txt
sources
public_html/database.*
downloads/test/*
使用指令:
--exclude-from '/home/backup/exclude.txt'
最后的命令如下:
[root@bastion-IDC ~]# /home/backup/exclude.txtrsync -e 'ssh -p 30000' -avl --delete --stats --progress --exclude-from '/home/backup/exclude.txt' demo@192.168.1.120:/home/demo /backup/
运维工作中常用到的几个rsync同步命令的更多相关文章
- Linux 运维工作中的经典应用ansible(批量管理)Docker容器技术(环境的快速搭建)
一 Ansible自动化运维工具 Python 在运维工作中的经典应用 ansible(批量管理操作) .安装ansible(需要bese epel 2种源) wget -O /etc/yum.rep ...
- 运维工作中sed常规操作命令梳理
sed是一个流编辑器(stream editor),一个非交互式的行编辑器.它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为"模式空间",接着用sed命令处理缓冲 ...
- Linux运维工作中需要掌握的知识
说到工具,在行外可以说是技能,在行内我们一般称为工具,就是运维必须要掌握的工具.我就大概列出这几方面,这样入门就基本没问题了.linux系统如果是学习可以选用redhat或centos,特别是cent ...
- Python在运维工作中的经典应用之ansible
1.安装ansible wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo curl -o /e ...
- 七年老运维实战中的 Shell 开发经验总结【转】
无论是系统运维,还是应用运维,均可分为“纯手工”—> “脚本化”—> “自动化”—>“智能化”几个阶段,其中自动化阶段,主要是将一些重复性人工操作和运维经验封装为程序或脚本,一方面避 ...
- 工作中常用Linux命令--服务器运维
工作中常用Linux命令--服务器运维 lsof查看端口使用情况 lsof -i:8080更多lsof命令使用说明:http://www.cnblogs.com/peida/archive/2013/ ...
- [转帖]Linux企业运维人员最常用150个命令汇总
Linux企业运维人员最常用150个命令汇总 https://clsn.io/clsn/lx998.html 基本上都用过了. 命令 功能说明 线上查询及帮助命令(2个) man 查看命令帮助,命令的 ...
- Ansible自动化运维工具及其常用模块
Ansible自动化运维工具及其常用模块 目录 Ansible自动化运维工具及其常用模块 一.Ansible简介 1. Ansible概述 2. Ansible作用 3. Ansible的工作模块 4 ...
- 工作中常用的Linux命令:crontab命令
本文链接:http://www.cnblogs.com/MartinChentf/p/6060252.html (转载请注明出处) crontab是一个用来设置.删除或显示供守护进程cron执行的定时 ...
随机推荐
- 404 & 401 Errors with the App Management Service
from:http://blogs.technet.com/b/sharepoint_-_inside_the_lines/archive/2013/06/23/404-amp-401-errors- ...
- Google HTML/CSS代码风格指南(中文版)
原文链接:http://wncbl.cn/posts/c8e10815/ 看一下没什么印象,那就写一遍吧. 背景 本文档定义了HTML/CSS的编写格式和风格规则.它旨在提高合作和代码质量,并使其支持 ...
- [Weblogic]如何清理缓存
背景:在开发调试或测试时,很多时候重新更新部署服务后会发现某些更新并没有体现到,还是之前的情况,也或者会出现其他错误问题,这个时候就要考虑到可能是weblogic缓存未清理引起. 清理缓存步骤如下: ...
- informatica 常见问题及解决方案
本文对于informatica使用过程中产生的问题及解决方案做总结,持续更新中... 1.partitioning option license required to run sessions wi ...
- Eclipse EE 发布项目导致 Tomcate 的配置文件 server.xml 还原
在server.xml中配置SSL时,发现了每次发布项目都导致server.xml被还原了: <Connector port="8443" protocol="or ...
- 【nginx】配置文件的优化
1.编译安装过程优化 在编译Nginx时,默认以debug模式进行,而在debug模式下会插入很多跟踪和ASSERT之类的信息,编译完成后,一个Nginx要有好几兆字节.在编译前取消Nginx的deb ...
- java微信接口之四—上传素材
一.微信上传素材接口简介 1.请求:该请求是使用post提交地址为: https://api.weixin.qq.com/cgi-bin/media/uploadnews?access_token=A ...
- IE6-8中Date不支持toISOString方法
Date.prototype.toISOString方法是在ES5里添加的,ES3文档中没有,如下 这个方法在IE6/7/8中不支持,可按下面方式修复下 if (!Date.prototype.toI ...
- IIS7上设置MIME让其支持android和Iphone的更新下载
Android APP的MIME: 文件扩展名:.apk MIME类型:application/vnd.android.package-archive iPhone APP的MIME: 文件扩展名:. ...
- top命令使用详解
1.top命令查看服务器负载情况,CPU使用率,进程数等信息. 0.0% wa IO等待占用CPU的百分比 86.9% id 表示空闲的CPU占比 load average数据是每隔5秒钟检查一次活 ...