使用crontab自动化拷贝工作

使用crontab自动化拷贝工作

一、 背景

由于开发机上缺少相应的环境,平时我们(特别是像我之类的新人)为了调试方便,往往会直接在测试机上进行开发工作,然后再拷贝到开发机上,提交到svn。然而这样会存在很多问题,有时候我们明明在测试机上测试正常,提测之后却出了问题,仔细检查可能会发现我们拷贝了文件到svn。避免这样的问题,一是在开发过程中,记录自己修改创建的文件,但这样比较繁琐;二是在开发机上开发,自测时使用测试机进行测试。毫无疑问第二种方法要好一些,但是这样往往会增加很多繁琐的拷贝工作,本文就是为了减少这样的工作而撰写。

二、 SSH免密码登录

我们首先要在测试机上建立免密码登陆开发机的信任关系。A为测试机(我的测试机是aaa@bbb.com); B为开发机(我的开发机是ccc@ddd.com);
在A上的命令:
# ssh-keygen -t rsa (机器A上操作,连续三次回车,即在本地生成了公钥和私钥,不设置密码)
# ssh ccc@ddd.com (机器A上操作,ssh登陆机器B时需要输入密码)
# mkdir .ssh;chmod 700 .ssh (机器B上操作,如果.ssh目录存在,则不需要mkdir, 注:必须将.ssh的权限设为700)
# scp ~/.ssh/id_rsa.pub ccc@ddd.com:/home/users/qinlei01/.ssh/id_rsa.pub(机器A上操作,需要输入密码)
登陆机器B,在B上的命令:
# touch ~/.ssh/authorized_keys (如果已经存在这个文件, 跳过这条)
# chmod 600 ~/.ssh/authorized_keys (# 注意: 必须将~/.ssh/authorized_keys的权限改为600, 该文件用于保存ssh客户端生成的公钥,可以修改服务器的ssh服务端配置文件/etc/ssh/sshd_config来指定其他文件名)
# cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys (将id_rsa.pub的内容追加到 authorized_keys 中, 注意不要用 > ,否则会清空原有的内容,使其他人无法使用原有的密钥登录)
回到A机器测试是否能免密码登陆机器B:
# ssh ccc@ddd.com(不需要密码, 登录成功)
=====================================================================
附上A与B互相免密码登陆的方法:
机器A:192.168.0.106
机器B:192.168.0.107
1、在机器A上执行如下操作
ssh-keygen -d
然后一路回车
cd ~/.ssh
cp id_dsa.pub authorized_keys2
chmod 600 authorized_keys2
2、在B上做如上同样的操作
3、建立A到B的信任关系(即A免密码登陆B)
在A中执行(注意需要把文件改名)
scp id_dsa.pub usernameB@192.168.0.107:.ssh/a.pub
在B中的~/.ssh下执行
cat a.pub >> authorized_keys2
此时从A执行ssh到B就不用输入密码了
4、建立B到A的信任关系(即B免密码登陆A)
在B执行
scp id_dsa.pub usernameA@192.168.0.106:.ssh/a.pub
在A执行
cat a.pub >> authorized_keys2
在配置过程需要输入多次密码
此时,无论从A到B,还是从B到A,都不需要输入密码了
如果出现问题,可以删除~/.ssh所有文件(连文件夹),然后重新配置
====================================================================

三、建立拷贝文件脚本

1、在机器A某路径建立拷贝文件脚本(如/home/wiki/xx.sh),在该xx.sh中加入自己需要从开发机上拷贝的文件。例如如下简单的xx.sh(要将xx.sh设定为可执行,可简单chmod 777 xx.sh

    scp  B机器相应的目录  A机器相应的目录

 
 

 


   scp qinlei01@db-gouyi.db01:/home/users/qinlei01/xxx /home/wiki/xxx

 

四、 crontab添加任务

1、 在A机器输入如下命令

# crontab –e (打开crontab的任务列表文件)

2、 输入如上命令后,vi会打开一个文件(不用管他),在其中输入如下命令(如果你想每一分钟执行xx.sh的话)

*/1  * * * * /home/wiki/xx.sh

五、附录

1、crontab使用:http://vbird.dic.ksu.edu.tw/linux_basic/0430cron.php#crontab

六、完结

到现在你的xx.sh脚本将会每隔一分钟执行拷贝任务了,这样你就不需要去关心从开发机拷贝代码到测试机的繁琐事务了。如果想即时将开发机上的代码拷贝到测试机上,只需手动执行xx.sh脚本即可。
xx.sh可以根据你的需要编写一些高级的逻辑,来判断文件自上次拷贝之后是否进行了修改,如果没有修改就跳过拷贝逻辑,来处理复杂的拷贝情况,这里给出 一个实现方案:在开发机上建立一个文件yy.txt,并在开发机上运行一个脚本定时计算需要拷贝的文件的md5值,与之前保存在yy.txt中相应文件的 md5值做比较,如果md5值改变,则写入另外一个文件zz.txt,然后测试机每隔固定时间从开发机拷贝这个zz.txt文件,这样测试机就知道哪些文 件发生了改变,只需要拷贝zz.txt中的文件即可,注意zz.txt中的相应文件的md5值需要覆盖yy.txt中相应文件的md5值,便于下一次比 较。当然如果觉得拷贝zz.txt也不够快速,可以考虑使用k-v数据库来存储。
希望这篇简单的文档能对你有所帮助。


posted on 2012-03-26 21:38 MrRightLeft 阅读(1542) 评论(3)  编辑 收藏 引用 所属分类: Linux

评论

# re: 使用crontab自动化拷贝工作 2012-03-27 07:51 newk

学习和使用git或者hg这种分布式源码控制软件,你上面碰到的问题将不复存在,而且和SVN也不会有什么冲突  回复  更多评论   

# re: 使用crontab自动化拷贝工作 2012-03-27 09:42 tb

好好研究一下   回复  更多评论   

# re: 使用crontab自动化拷贝工作 2012-03-27 11:18 MrRightLeft

@newk
一般git/svn在开发机上使用,测试机上没有git/svn,代码需要手动从开发机同步到测试机。不过可以考虑使用svn的hook,在commit时,钩子程序自动将代码同步到测试机。git有略微使用过,兄台可否写一篇文章介绍一下使用方法?  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2011年5月>
24252627282930
1234567
891011121314
15161718192021
22232425262728
2930311234

导航

统计

随笔分类

随笔档案

文章分类

文章档案

搜索

最新评论

阅读排行榜

评论排行榜