Linux学习总结(六十四)expect脚本下

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux学习总结(六十四)expect脚本下相关的知识,希望对你有一定的参考价值。

一 文件分发系统

需求背景对于大公司而言,肯定时不时会有网站或者配置文件更新,而且使用的机器肯定也是好多台,少则几台,多则几十甚至上百台。所以,自动同步文件是至关重要的。
实现思路首先要有一台模板机器,把要分发的文件准备好,然后只要使用 expect脚本批量把需要同步的文件分发到目标机器即可。
核心命令rsync -av --files-from=list.txt / [email protected]:/
具体实现:

  • 创建expect脚本,调用上面的核心命令,实现文件同步
  • 创建文件列表和ip列表,指定要分发的文件路径和分发对象主机。
  • 创建一个shell脚本,对上面指定的ip列表进行循环遍历,并调用expect脚本分发文件。
    代码如下:
    1 vim rsync.expect
    #!/usr/bin/expect
    set passwd "123456"
    set host [lindex $argv 0]
    set file [lindex $argv 1]
    spawn rsync -avR --files-from=$file / [email protected]$host:/
    expect {
    "yes/no" { send "yes
    "}
    "password:" { send "$passwd
    " }
    }
    expect eof

    2 两个列表文件

    vim filelist.txt
    /root/123.txt
    /usr/local/sbin/lvs_dr.sh
    ...
    vim iplist.txt
    192.168.226.130
    192.168.225.131
    ...

    3 vim rsync.sh

    #!/bin/bash
    for ip in `cat iplist.txt`;do
    ./rsync.expect $ip filelist.txt
    done

    二 多台机器的命令分发

    仿照上面的思路,就是用expect脚本在远程主机上执行命令,再用shell脚本对远程主机ip做一个循环,再调用expect脚本即可。
    1 编写expect脚本
    vim command.expect

    #!/usr/bin/expect
    set host [lindex $argv 0]
    set passwd "123456"
    set cm [lindex $argv 1]
    spawn ssh [email protected]$host
    expect {
    "yes/no" { send "yes
    "}
    "password:" { send "$passwd
    " }
    }
    expect "]*"
    send "$cm
    "
    expect "]*"
    send "exit
    "

    2 编写ip列表文件

    vim iplist.txt
    192.168.226.130
    192.168.226.131
    ...

    3 编写shell循环脚本

    vim command.sh
    for ip in `cat iplist.txt`;do
    ./command.expect $ip "ls"
    done

    备注:用expect脚本上线代码仅仅是一种思路,如果采用了秘钥认证,当然可以直接使用shell脚本调用rsync命令,再做一个循环就可以。后续还需要学习更高级的工具来上线代码,比如git。

以上是关于Linux学习总结(六十四)expect脚本下的主要内容,如果未能解决你的问题,请参考以下文章

Linux学习总结(六十八)文本编辑脚本

Linux学习总结(六十五)tomcat启动脚本

Linux学习总结(六十七)rm命令限制脚本

Linux学习总结(六十)shell脚本4-函数及数组

Linux学习总结(六十六)打印一串数字的脚本

学习六十四