Linux學習總結(六十四)expect腳本下

一 文件分發系統

需求背景對於大公司而言,確定時不時會有網站或者配置文件更新,並且使用的機器確定也是好多臺,少則幾臺,多則幾十甚至上百臺。因此,自動同步文件是相當重要的。
實現思路首先要有一臺模板機器,把要分發的文件準備好,而後只要使用 expect腳本批量把須要同步的文件分發到目標機器便可。
核心命令rsync -av --files-from=list.txt / root@host:/
具體實現:git

  • 建立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 / root@$host:/
    expect {
    "yes/no" { send "yes\r"}
    "password:" { send "$passwd\r" }
    }
    expect eof

    2 兩個列表文件 shell

    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.shvim

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

    二 多臺機器的命令分發

    仿照上面的思路,就是用expect腳本在遠程主機上執行命令,再用shell腳本對遠程主機ip作一個循環,再調用expect腳本便可。
    1 編寫expect腳本
    vim command.expectbash

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

    2 編寫ip列表文件ssh

    vim iplist.txt
    192.168.226.130
    192.168.226.131
    ...

    3 編寫shell循環腳本ide

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

    備註:用expect腳本上線代碼僅僅是一種思路,若是採用了祕鑰認證,固然能夠直接使用shell腳本調用rsync命令,再作一個循環就能夠。後續還須要學習更高級的工具來上線代碼,好比git。工具

相關文章
相關標籤/搜索