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 命令查看 拷贝脚本是否在运行。