expect脚本同步文件expect脚本指定host和同步的文件构建文件分发系统批量远程执行命

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了expect脚本同步文件expect脚本指定host和同步的文件构建文件分发系统批量远程执行命相关的知识,希望对你有一定的参考价值。

技术分享图片

expect脚本当中去把一台机器的文件同步到另外一台机器上去,自动同步文件

[[email protected] sbin]# vim 4.expect         ##编辑脚本
写入一下内容:
#!/usr/bin/expect
set passwd "hanshuo"
spawn rsync -av [email protected]:/tmp/12.txt /tmp/
expect {
"yes/no" { send "yes
"}
"password:" { send "$passwd
" }
}
expect eof

技术分享图片

加个执行权限

[[email protected] sbin]# chmod a+x 4.expect

测试这个脚本

[[email protected] sbin]# ./4.expect

技术分享图片

expect脚本指定host和要同步的文件

技术分享图片

指定host和要同步的文件

[[email protected] sbin]# vim 5.expect     ##编辑脚本
写入一下内容:
#!/usr/bin/expect
set passwd "hanshuo"
set host [lindex $argv 0]
set file [lindex $argv 1]
spawn rsync -av $file [email protected]$host:$file      ##同步文件本机到对方
expect {
"yes/no" { send "yes
"}
"password:" { send "$passwd
" }
}
expect eof

技术分享图片

加个执行权限

[[email protected] sbin]# chmod a+x 5.expect

测试这个脚本

[[email protected] sbin]# ./5.expect 192.168.63.101 "/tmp/12.txt"    ##把本地的12.txt同步到了远程

技术分享图片

构建文件分发系统

技术分享图片

掌握了expect的基础知识,用所学的东西构建个文件分发系统,以上是同步一个文件,我的需求同步一堆,这些文件需要写到一个文件列表里边去,我们使用rsync的files-from这个参数就能够实现把列表里边的文件给同步到远程去,那么在列表的路径必须要绝对路径

文件分发系统的实现
首先定义rsync.expect

技术分享图片
技术分享图片


[[email protected] sbin]# vim rsync.expect    ##编辑rsync.expect
写入一下内容:
#!/usr/bin/expect
set passwd "hanshuo"
set host [lindex $argv 0]
set file [lindex $argv 1]
spawn rsync -avR --files-from=$file / [email protected]$host:/       ##大写R是如果同步机器路径不相同自动创建
expect {
"yes/no" { send "yes
"}
"password:" { send "$passwd
" }
}
expect eof

技术分享图片

定义file.list,这个file你可以写到tmp下名字叫file.list

[[email protected] sbin]# vim /tmp/file.list              ##编辑文件列表file.list,这个文件里边是你要同步到另一台的文件
写入一下内容:
/tmp/12.txt
/root/shell/1.sh
/root/111.txt

技术分享图片

定义ip.list

[[email protected] sbin]# vim /tmp/ip.list    ##编辑一个ip.list里边写入你要同步文件的ip
写入以下内容:
192.168.63.101
192.168.63.104

技术分享图片

创建rsync.sh编辑它

[[email protected] sbin]# vim rsync.sh     ##编辑rsync.sh
写入以下内容:
#!/bin/bash
for ip in `cat /tmp/ip.list`
do
     ./rsync.expect $ip /tmp/file.list
done

给rsync.expect执行权限

[[email protected] sbin]# chmod a+x rsync.expect

执行rsync.expect

[[email protected] sbin]# sh -x rsync.sh

技术分享图片

批量远程执行命令

技术分享图片

技术分享图片

构建命令批量执行

编辑exe.expect

[[email protected] sbin]# vim exe.expect      
写入下列内容:

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

给exe.expect执行权限

[[email protected] sbin]# chmod a+x exe.expect

定义一个exe.sh的shell脚本

[[email protected] sbin]# vim exe.sh
写入下列内容:
#!/bin/bash
for ip in `cat /tmp/ip.list`
do
     ./exe.expect $ip "hostname"
done

执行exe.sh

[[email protected] sbin]# sh exe.sh

技术分享图片

扩展

shell多线程 http://blog.lishiming.net/?p=448

以上是关于expect脚本同步文件expect脚本指定host和同步的文件构建文件分发系统批量远程执行命的主要内容,如果未能解决你的问题,请参考以下文章

20.31 expect脚本同步文件 20.32 expect脚本指定host和要同步的文件 20.

expect脚本同步文件expect脚本指定host和同步的文件构建文件分发系统批量远程执行命

expect脚本同步文件,expect脚本指定host和要同步的文件,构建文件分发系统,批量远程执行

expect脚本同步文件 expect脚本指定host和要同步的文件 构建文件分发系统 批量远程执行

expect脚本同步文件expect脚本指定host和要同步的文件构建文件分发系统批量远程执行

expect脚本同步文件expect脚本指定host和要同步的文件构建文件分发系统批量远程执行