http://my.oschina.net/immk/blog/193926

动机与需求:现在有两台服务器A和B,由于A的存储随时会挂(某些原因),所以需要B机器上有A的备份,并且能够与A同步更新

一、crontab定时任务

发现了crontab这个东西

简单实践了一下,把使用的过程写到下面:

首先是编辑一个文件,这个文件在一个很不好找的位置,但crontab提供了一个命令可以直接用vi打开这个文件

crontab -e

文件打开以后要在文件末尾加上一行:

* * * * * mkdir /usr/local/test >/home/log.txt 2>&1

总共分为三个部分,首先是5个星星,格式是 分钟 小时 日期 月份 星期几

举个例子应该就明白了:

59 23 * * 5

这个意思是每周五的23点59分执行一下后面的这个命令

mkdir /usr/local/test

就是要执行的命令

>/home/log.txt 2>&1

则是指定命令执行时输出的信息放到/home/log.txt这个文件里,2>&1是指将标准输出转换到文件流

如果只有命令而不指定输出日志文件的话,在crontab的日志里可能会报错:

(CRON) info (No MTA installed, discarding output)

这是因为你的机器没有安装任何的邮件发送的软件,也就是MTA,而crontab是默认要将输出的信息以邮件的形式发送的,所以就会有这样的错误

说到crontab的日志,系统是ubuntu12.04

默认位置是/var/log/cron.log这个文件

如果没有,那么可能要修改一下rsyslog里的配置文件,文件位置是

/etc/rsyslog.d/50-default.conf

将这一行注释前面的“#”去掉即可(原来是注释掉的,所以没有日志文件)

#cron.*   /var/log/cron.log

然后重启rsyslog服务

service rsyslog restart

对于CentOS,rsyslog的配置文件是/etc/rsyslog.conf,里面关于cron的日志输出这一项没有被注释掉

所以不用改,默认的执行日志文件为:/var/log/cron

二、rsync增量更新

然后是文件的增量更新,主要解决的问题是现在有两台服务器A和B,要将A服务器上的test目录增量复制到B服务器上的test目录(所谓增量更新就是指B服务器原来已经有的文件不再传了,只传送那些A有的而B没有的),这样使得B服务器上的test文件夹保持与A同步

这就需要用到rsync这个命令,这个命令的用法跟scp是一样的

比如在A服务器下执行命令:rsync -r /home/test/ user@B:/home/test 即可实现增量更新

注意:这里有一个问题需要详细说明一下:

假如test目录下有1.txt,2.txt这两个文件

如果命令中源目录那里写成这样:/home/test/

那么rsync准备更新的文件列表就是

1.txt

2.txt

然后就会在B机器的/home/test目录下找这两个文件并做增量更新,这样能够满足需求

但如果源目录写成这样:/home/test

那么rsync准备增量更新的文件列表就会是这样:

test/1.txt

test/2.txt

然后在B机器的/home/test目录下寻找test/1.txt,发现没有test文件夹,于是又创建了test文件夹,所以这样执行的结果就是B机器的目录结构就会有这两个文件,而这不是希望看到的

/home/test/test/1.txt

/home/test/test/2.txt

所以要注意这个问题。下面两种写法是正确的:

rsync -r /home/test/ user@B:/home/test

或者

rsync -r /home/test user@B:/home

具体的关于rsync的详细参数的设置这里就不说了,这里只把一种推荐的命令运行方式记录下来:

rsync -rtv /home/test/ user@B:/home/test

-t是指判断文件是否已有的时候只判断文件的时间戳和文件的大小,如果都一样就把这个文件跳过(这是一种不够严谨但足够快的方法)

-v是指输出一下执行的日志,其实可以加很多v,v越多,输出的日志越多

三、免验证访问

现在就可以将crontab和rsync结合一下了,当然首先需要解决两个机器之间rsync免验证的问题,也就是命令可以直接这样写(不需要B机器的用户名和密码):

rsync -rtv /home/test user@B:/home/test

关于这个网上看了一些rsync的配置,但是觉得太麻烦了,想到这个跟scp差不多,是不是也可以直接ssh免验证的那种方式解决,试了一下,可行

关于ssh免验证登录,是这样做的(这里的用户全部用root,当然可以用其他的):

在A机器下:

首先生成秘钥文件

ssh-keygen -t rsa -P ''

注意‘’是两个单引号,表示密码为空

然后将生成的id_rsa.pub文件复制到B服务器上(注意文件的位置为/root/.ssh,如果是其他用户应该是/home/user/.ssh,即为当前用户的主目录)

scp /root/.ssh/id_rsa.pub root@B:/root/

(因为操作还没有完成,这里还要输入密码)

然后在B机器上操作:

如果/root/.ssh/里没有authorized_keys这个文件,那么将从A机器scp过来的id_rsa.pub文件移动并重命名成authorized_keys即可

mv /root/id_rsa.pub /root/.ssh/authorized_keys

如果这个authorized_keys文件已经存在,那么将id_rsa.pub这个文件的内容追加到authorized_keys即可

cat /root/id_rsa.pub >> /root/.ssh/authorized_keys

此时就可以在A机器上免密码访问B机器了,注意别搞反了

在A机器上测试一下:

ssh root@B

如果不需要输入密码就可以登录,说明配置成功

四、综合

OK,准备工作都完成了,下面就可以实现需求了,在A机器下:

1、crontab -e打开crontab的配置文件

2、在最后一行加入下面的代码

0 0,6,12,18 * * * rsync -rvt /app/elearndata/ root@inc204:/home/elearndata >>/home/updateLog.txt 2>&1

注意inc204是我的B机器名,需要在A机器的hosts下面配置其IP映射,当然也可以直接用ip代替

这句代码的意思是每6个小时(在0点,6点,12点,18点)对elearndata这个文件夹进行从A到B的增量更新,并将rsync的日志输出到/home/updateLog.txt这个文件里,‘>>’是追加输出的意思

3、保存即可,大功告成

经测试,可满足需求

转载于:https://www.cnblogs.com/davidwang456/p/3526436.html

Linux定时增量更新文件--转相关推荐

  1. linux定时执行sh文件

    Linux定时任务调用sh文件 博客出处:http://www.cnblogs.com/413xiaol/p/6821740.html 1.编写sh文件 创建:vi test.sh 写入:date & ...

  2. solr4 mysql自动更新_solr7.4 定时增量更新数据-Go语言中文社区

    准备 centos7 下solr7.4.0 配置mysql 数据源 可参考: https://blog.csdn.net/guyan0319/article/details/81203184 配置da ...

  3. linux数据库云盘备份,linux定时备份本地文件或数据库到百度云盘bypy

    环境配置 python3.7+centos7 查看centos版本信息 cat /etc/redhat-release 查看linux版本 cat /proc/version 查看python版本 p ...

  4. Solr定时增量更新

    1  概述 将数据库中的数据导入到了solr中之后,如果数据库中的数据有变动,solr中还是第一次导入的旧的数据,因此需要定时检测数据库中的数据变化,并实时将变化的数据同步到solr中. 2  配置定 ...

  5. linux shell touch更新文件时间

    目录 更改文件为当前时间 更改文件为指定时间 更改文件为别的文件相同的时间 更新指定目录下的所有文件时间 语法 总结 更改文件为当前时间 无此文件情况下 会创建一个文件 $touch new.txt ...

  6. linux搜索一天内更新的所有文件,linux下怎样更新文件夹下所有文件的时间戳

    满意答案 sannmy 2017.10.23 采纳率:49%    等级:9 已帮助:2263人 在Linux中,文件没有"创建时间"这个说法.Linux中的文件的时间属性只有三个 ...

  7. linux定时备份网站发布目录,Linux 定时备份网站文件至七牛云存储 | 厘米天空

    网站数据是站长的命根子,所以每日备份就很重要.如果你没有FTP空间,可以申请一个七牛云存储,免费10G空间备份一般的小站足够了.这里介绍一个备份网站文件和数据库到七牛的脚本,实测效果还不错,Linux ...

  8. linux 定时执行php文件

    工作需要 经常我们会定时执行php一个程序 满足业务需求 比如 :定时给用户进行邀请返利.定时进行用户消费排名更新.定时进行余额转账等等. 原来之前博客写过定时进行数据库和线上代码的备份. 现在记录哈 ...

  9. linux执行脚本提示文件忙,linux定时执行脚本文件fgo 封号吗

    当我们要移动控制项(Control)或表单(Form)时,很多人习惯这样写: frmCustomer.Left=frmCustomer.Left 100 frmCustomer.Top=frmCust ...

最新文章

  1. 初步了解BIM模型和超图相关操作
  2. 直播 | ICML 2021论文解读:满足隐私保护要求的去中心化无监督域迁移范式
  3. pytesseract:opencv预处理图片
  4. python app自动化测试框架_appium+python,app自动化测试框架
  5. extend_gcd求解不定方程/膜线性方程/乘法(模)逆元
  6. 【dp】POJ-2817
  7. php项目邮件连接无效,完美解决wordpress邮件链接无效的问题
  8. HTML5本地存储——IndexedDB
  9. leetcode 题库1028--从先序遍历还原二叉树
  10. catti二级笔译综合能力真题_2006年-2011年CATTI二级笔译综合能力试题及答案2018年.doc...
  11. java一览删除一条数据_可以删除单条数据,不能再返回列表页面,我使用的是Spring MVC...
  12. eclipejsp与java跳转_JSP跳转方式与Servlet跳转方式的区别
  13. Spring处理跨域请求
  14. 消费信贷 开源数据_消费或发布开源软件的6大动机
  15. 主流游戏引擎分析 【端游 、页游 、手游 解析】
  16. 一元享移动怎么样_移动新套餐:18元享“全免流”+1元1G流量,阿里鱼卡要遭殃?...
  17. 将MindManager添加到鼠标右键新建项
  18. PHP多维数组按照键进行排序(对KEY按ASSIIC码排序)
  19. VirtualLab Fusion:基于微软专利的蝴蝶型出瞳扩展光导
  20. 结合实战暴利营销13种技巧方式总有一个万里挑一适合你!!!

热门文章

  1. android 圆滑曲线,如何使用贝塞尔曲线在一组点上绘制平滑线?
  2. linux oracle停启,linux下Oracle自动启动与停止总结
  3. centos7已有数据硬盘挂载_CentOS7如何添加硬盘和挂载硬盘
  4. linux gz bz,linux把文件压缩命令 tar gz bz bz2
  5. oracle 用户 表空间绑定,ORACLE表空间绑定用户操作流程
  6. Dictionary泛型集合
  7. sketchup转stl_如何将.obj或.stl文件导入SketchUp的简便方法 - SketchUp自学
  8. c++枚举类型(二) 命名空间
  9. opencv 显示图片
  10. Python量化(八)下影线选股法