码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2018-06-08 12:17:13      阅读:193      评论:0      收藏:0      [点我收藏+]

标签:expect

                         一、expect脚本同步文件

自动同步文件 ,把远程的文件同步到本机

cd /usr/local/sbin

1.脚本内容:


#!/usr/bin/expect
set passwd "123456"
spawn rsync -av root@192.168.136.134:/tmp/12.txt /tmp/

expect {
"yes/no" { send "yes\r" }
"password:" { send "$passwd\r" }
}

expect eof

(使用expect eof  会在登录后停留一会再退出,如果不添加这行或者interact,则登录后立马退出)



2.编写完脚本后,修改脚本权限:

chmod a+x syn.expect


3.执行脚本:

./syn.expect

技术分享图片


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

 指定host和要同步的文件:(从本机到远程)

脚本内容:


#!/usr/bin/expect

set passwd "123456"
set host [lindex $argv 0]
set file [lindex $argv 1]
spawn rsync -av $file root@$host:$file

expect {
"yes/no" { send "yes\r"}
"password:" { send "$passwd\r" }
}

expect eof


#!/usr/bin/expect

set passwd "123456"
set host [lindex $argv 0]
set file [lindex $argv 1]
spawn rsync -av $file root@$host:$file

expect {
"yes/no" { send "yes\r"}
"password:" { send "$passwd\r" }
}

expect eof


2.修改脚本权限:chmod a+x syn_1.expect

3.执行脚本:

./rsy_1.expect 192.168.136.134 "/tmp/test.com.log"

(第一个参数是主机,第二个参数是要同步的文件)

技术分享图片



            三、构建文件分发系统

技术分享图片

首先要有一个要同步的文件列表和一个同步机器的ip列表:


1.创建同步文件列表:

vim /tmp/list.txt

 /tmp/12.txt

/root/111/4913

....

(文件中是写要同步的本机同步文件路径(绝对路径),要同步的文件的路径在对方机器上要有,否则要在同步命令中加上-R。rsync -avR)


2.创建同步机器ip列表(因为实际中远程同步的机器不止一台)

vim /tmp/ip.list

192.168.136.134

192.168.136.136

...

在这些同步的机器,这里测试是保证它们的密码都是一样的。否则就是要每个主机登陆

密码都要设定。或者设定密钥认证,这样就可以省略脚本中输入密码的那行内容:"password:" { send "$passwd\r" }


3.创建脚本:

vim /usr/local/sbin/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

(rsync -avR 这个-R选项能使同步机器不存在的文件路径级联创建)

编写完脚本要修改权限 chmod a+x /usr/local/sbin/rsync.expect


4.创建一个shell脚本去执行expect脚本内容:

vim /usr/local/sbin/rsync.sh

 rsync.sh 内容
#!/bin/bash
for ip in `cat /tmp/ip.list`
do
    echo $ip
    ./rsync.expect $ip list.txt
done


5.执行shell脚本

sh -x /usr/local/sbin/rsync.sh



                     四、批量远程执行命令

1.expect脚本内容:vim /usr/local/sbin/exe.expect

#!/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.编写shell执行expect脚本

vim /usr/local/sbin/exe.sh

#!/bin/bash
for ip in `cat /tmp/ip.list`
do
    echo $ip
    ./exe.expect $ip "w;free -m;ls /tmp"
done


执行w;free -m;ls /tmp命令

















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

标签:expect

原文地址:http://blog.51cto.com/13589255/2126166

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!