linux 下檔案同步複製
1. 採用方式
在一台機器上建立一個臨時存放目錄,存放檔案,從這個臨時目錄向多台
伺服器傳送檔案。對於該臨時目錄下傳送後的檔案,徹底刪除。
/root/tempplay :臨時目錄
/root/play :播放檔案存放目錄
並假定IP 地址如圖所示。
|----------------------------|
|機器A(192.168.0.1) |
|----------------------------|
|/root/tempplay |
|----------------------------|
|/root/play |
|----------------------------|
|-----------------------------|
|機器B1(192.168.0.2) |
|-----------------------------|
|/root/play |
|-----------------------------|
機器 B2,B3 和 B1 的目錄結構一致。
圖中的機器 A 就是我們的資料來源機器,源機器上 /root/tempplay 目錄就是
我們的臨時目錄,需要從 /root/tempplay 向所有機器的 /root/play 目錄傳送檔案。/
2. 步驟
以下為了方便操作,全部採用 root 使用者在在 red linux 上測試通過。
2.1 臨時目錄建立
在 A 上
mkdir /root/tempplay
2.2 建立播放目錄
在所有機器上
mkdir /root/play
2.3 搞定認證,產生密鑰
在 A 上
cd ~/.ssh
#產生公開金鑰檔案(id_dsa.pub)和私密金鑰檔案(id_dsa), 類型DSA, 長度1024 bits
#注意詢問passphrase的時候直接斷行符號
ssh-keygen -t dsa -b 1024
#將公開金鑰(id_dsa.pub)複製到遠端B1,B2,B3三台伺服器去,命名為 id_dsa.pub.client
2.4 確認認證
在 B1,B2,B3 上執行下面操作
cd ~/.ssh
#將Client的公開金鑰放入Server的信任清單
cat id_dsa.pub.client >> authorized_keys
#更新許可權,很重要
chmod 700 $HOME/.ssh
chmod 600 $HOME/.ssh/authorized_keys
chmod g-w $HOME $HOME/.ssh $HOME/.ssh/authorized_keys
2.5 編寫複製檔案指令檔 synchfile.sh,內容如下:
#bin/bash
# 拷貝尾碼名稱是 mp4 的檔案
scp -p –q /root/tempplay/*.mp4 root/play /
scp -p –q /root/tempplay/*.mp4 root@192.168.0.2:/root/play /
scp -p –q /root/tempplay/*.mp4 root@192.168.0.3:/root/play /
scp -p –q /root/tempplay/*.mp4 root@192.168.0.4:/root/play /
# 結束後刪除臨時目錄下檔案
rm –f –r /root/tempplay/*.mp4
2.6 指令碼部署
在 A 上,複製檔案synchfile.sh 到 /root 下
chmod a+x /root/synchfile.sh
2.7 定時執行
在 A 上,
#產生定時執行檔案 /root/mycron,
crontab -l > /root/mycron
編輯檔案 /root/mycron,增加如下內容(表示15 分鐘執行一次)
*/15 * * * * /root/synchfile.sh
#crontab 命令配置定時執行 synchfile.sh
crontab /root/mycron –u root
#重新引導
/etc/rc.d/init.d/crond restart
2.8 弊端
以上的部署不能保證你向 /root/tempplay 目錄拷貝檔案的時候,同時腳
本也在執行拷貝該目錄下的檔案到 /root/play 目錄,這樣會衝突,引起檔案的不完整。所以拷貝指令碼正在執行的時候,不要向 /root/tempplay 下放需要被複製到其他機器的檔案。
可以使用 ps –e –f |grep scp 命令查看 拷貝指令碼是否在運行。