构建文件分发系统

1. 需求背景

对于大公司而言,肯定时不时会有网站或者配置文件更新,而且使用的机器肯定也是好多台,少则几台,多则几十甚至上百台。所以,自动同步文件是至关重要的。


2. 实现思路

首先要有一台模板机器,把要分发的文件准备好,然后只要使用expect脚本批量把需要同步的文件分发到目标机器即可。注意:环境必须一致,否则可能出现问题。


3. 核心命令

rsync -av --files-from=list.txt  /  root@host:/     这条语句用来批量同步文件


4. 文件分发系统的实现


rsync.expect 首先新建一个expect脚本,定义变量和功能

#!/usr/bin/expect

set passwd "hd792310"

set host [lindex $argv 0]

set file [lindex $argv 1]

spawn rsync -av --files-from=$file / root@$host:/

expect {

"yes/no" { send "yes\r"}

"password:" { send "$passwd\r" }

}

expect eof


rsync.sh 其次新建一个SHELL脚本,循环IP列表来进行批量同步

#!/bin/bash

for ip in `cat ip.list`

do

    echo $ip

    ./rsync.expect $ip list.txt

done



总结:要实现以上同步多台电脑,多个文件。需要4个文件配合:1.rsync.expect脚本

                                                         2.rsync.sh循环脚本

                                                         3.ip.list机器的IP列表

                                                         4.list.txt同步的文件列表


注意:实验机器3台,30为模板机器,60、70为目标机器。同步过程中出现错误提示:

[root@wyp ~]# bash rsync.sh

192.168.11.60

spawn rsync -av --files-from=file.list / root@192.168.11.60:/

The authenticity of host '192.168.11.60 (192.168.11.60)' can't be established.

RSA key fingerprint is a1:f3:fc:91:f7:94:5d:fa:8e:12:29:81:31:36:25:99.

Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added '192.168.11.60' (RSA) to the list of known hosts.

root@192.168.11.60's password: 192.168.11.70

spawn rsync -av --files-from=file.list / root@192.168.11.70:/

root@192.168.11.70's password:

building file list ... done


可以看出60在第一次登陆时出现问题,而70正常。重新执行一遍脚本,60也正常了。得到预期效果

怀疑"yes/no" { send "yes\r"; exp_continue}命令没有写全有关,有待查证。