使用crontab自動化拷貝工作
一、 背景
由于開發(fā)機上缺少相應(yīng)的環(huán)境,平時我們(特別是像我之類的新人)為了調(diào)試方便,往往會直接在測試機上進(jìn)行開發(fā)工作,然后再拷貝到開發(fā)機上,提交到svn。然而這樣會存在很多問題,有時候我們明明在測試機上測試正常,提測之后卻出了問題,仔細(xì)檢查可能會發(fā)現(xiàn)我們拷貝了文件到svn。避免這樣的問題,一是在開發(fā)過程中,記錄自己修改創(chuàng)建的文件,但這樣比較繁瑣;二是在開發(fā)機上開發(fā),自測時使用測試機進(jìn)行測試。毫無疑問第二種方法要好一些,但是這樣往往會增加很多繁瑣的拷貝工作,本文就是為了減少這樣的工作而撰寫。
我們首先要在測試機上建立免密碼登陸開發(fā)機的信任關(guān)系。A為測試機(我的測試機是aaa@bbb.com); B為開發(fā)機(我的開發(fā)機是ccc@ddd.com);
在A上的命令:
# ssh-keygen -t rsa (機器A上操作,連續(xù)三次回車,即在本地生成了公鑰和私鑰,不設(shè)置密碼)
# ssh ccc@ddd.com (機器A上操作,ssh登陸機器B時需要輸入密碼)
# mkdir .ssh;chmod 700 .ssh (機器B上操作,如果.ssh目錄存在,則不需要mkdir, 注:必須將.ssh的權(quán)限設(shè)為700)
# scp ~/.ssh/id_rsa.pub ccc@ddd.com:/home/users/qinlei01/.ssh/id_rsa.pub(機器A上操作,需要輸入密碼)
登陸機器B,在B上的命令:
# touch ~/.ssh/authorized_keys (如果已經(jīng)存在這個文件, 跳過這條)
# chmod 600 ~/.ssh/authorized_keys (# 注意: 必須將~/.ssh/authorized_keys的權(quán)限改為600, 該文件用于保存ssh客戶端生成的公鑰,可以修改服務(wù)器的ssh服務(wù)端配置文件/etc/ssh/sshd_config來指定其他文件名)
# cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys (將id_rsa.pub的內(nèi)容追加到 authorized_keys 中, 注意不要用 > ,否則會清空原有的內(nèi)容,使其他人無法使用原有的密鑰登錄)
回到A機器測試是否能免密碼登陸機器B:
# ssh ccc@ddd.com(不需要密碼, 登錄成功)
=====================================================================
附上A與B互相免密碼登陸的方法:
機器A:192.168.0.106
機器B:192.168.0.107
1、在機器A上執(zhí)行如下操作
ssh-keygen -d
然后一路回車
cd ~/.ssh
cp id_dsa.pub authorized_keys2
chmod 600 authorized_keys2
2、在B上做如上同樣的操作
3、建立A到B的信任關(guān)系(即A免密碼登陸B(tài))
在A中執(zhí)行(注意需要把文件改名)
scp id_dsa.pub usernameB@192.168.0.107:.ssh/a.pub
在B中的~/.ssh下執(zhí)行
cat a.pub >> authorized_keys2
此時從A執(zhí)行ssh到B就不用輸入密碼了
4、建立B到A的信任關(guān)系(即B免密碼登陸A)
在B執(zhí)行
scp id_dsa.pub usernameA@192.168.0.106:.ssh/a.pub
在A執(zhí)行
cat a.pub >> authorized_keys2
在配置過程需要輸入多次密碼
此時,無論從A到B,還是從B到A,都不需要輸入密碼了
如果出現(xiàn)問題,可以刪除~/.ssh所有文件(連文件夾),然后重新配置
====================================================================
三、建立拷貝文件腳本
1、在機器A某路徑建立拷貝文件腳本(如/home/wiki/xx.sh),在該xx.sh中加入自己需要從開發(fā)機上拷貝的文件。例如如下簡單的xx.sh(要將xx.sh設(shè)定為可執(zhí)行,可簡單chmod 777 xx.sh)
|
| scp B機器相應(yīng)的目錄 A機器相應(yīng)的目錄 | |
scp qinlei01@db-gouyi.db01:/home/users/qinlei01/xxx /home/wiki/xxx
四、 crontab添加任務(wù)
1、 在A機器輸入如下命令
# crontab –e (打開crontab的任務(wù)列表文件)
2、 輸入如上命令后,vi會打開一個文件(不用管他),在其中輸入如下命令(如果你想每一分鐘執(zhí)行xx.sh的話)
*/1 * * * * /home/wiki/xx.sh
五、附錄
1、crontab使用:http://vbird.dic.ksu.edu.tw/linux_basic/0430cron.php#crontab
六、完結(jié)
到現(xiàn)在你的xx.sh腳本將會每隔一分鐘執(zhí)行拷貝任務(wù)了,這樣你就不需要去關(guān)心從開發(fā)機拷貝代碼到測試機的繁瑣事務(wù)了。如果想即時將開發(fā)機上的代碼拷貝到測試機上,只需手動執(zhí)行xx.sh腳本即可。
xx.sh可以根據(jù)你的需要編寫一些高級的邏輯,來判斷文件自上次拷貝之后是否進(jìn)行了修改,如果沒有修改就跳過拷貝邏輯,來處理復(fù)雜的拷貝情況,這里給出 一個實現(xiàn)方案:在開發(fā)機上建立一個文件yy.txt,并在開發(fā)機上運行一個腳本定時計算需要拷貝的文件的md5值,與之前保存在yy.txt中相應(yīng)文件的 md5值做比較,如果md5值改變,則寫入另外一個文件zz.txt,然后測試機每隔固定時間從開發(fā)機拷貝這個zz.txt文件,這樣測試機就知道哪些文 件發(fā)生了改變,只需要拷貝zz.txt中的文件即可,注意zz.txt中的相應(yīng)文件的md5值需要覆蓋yy.txt中相應(yīng)文件的md5值,便于下一次比 較。當(dāng)然如果覺得拷貝zz.txt也不夠快速,可以考慮使用k-v數(shù)據(jù)庫來存儲。
希望這篇簡單的文檔能對你有所幫助。