为什么80%的码农都做不了架构师?>>>   

20.31 expect脚本同步文件

使用expect脚本同步文件

说明:核心命令是rsync

#! /usr/bin/expect
set passwd "123456"
spawn rsync -av root@192.168.2.116:/tmp/66.txt /tmp/
expect {
"yes/no" {send "yes\r"}
"password:" {send "$passwd\r"}
}
expect eof                       #最后一定要加expect eof 或interact,否则还没有执行完,就已经退出了说明:把192.168.2.116机器上/tmp/66.txt同步到本机/tmp/目录下#添加执行权限
[root@root-01 test]# chmod a+x 4.expect #执行
[root@root-01 test]# ./4.expect
spawn rsync -av root@192.168.2.116:/tmp/66.txt /tmp/
root@192.168.2.116's password:
receiving incremental file list
66.txtsent 30 bytes  received 92 bytes  81.33 bytes/sec
total size is 13  speedup is 0.11[root@root-01 test]# ls /tmp/66.txt
/tmp/66.txt说明:同步成功,本机/tmp/下有66.txt

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

本机文件同步到另外一台机器

说明:只支持同步单个文件

#! /usr/bin/expect
set passwd "123456"
set host [lindex $argv 0]                 //host是第一个变量,(指定IP)
set file [lindex $argv 1]                 //file是第二个变量, (指定文件要写绝对路径)
spawn rsync -av $file root@host:$file     //$file 是本机的文件到对方机器的文件
expect {
"yes/no" {send "yes\r"}
"password:" {send "$passwd\r"}
}
expect eof说明:把本机的文件传输到另外一台机器#添加执行权限
[root@root-01 test]# chmod a+x 5.expect#执行
[root@root-01 test]# ./5.expect 192.168.2.116 "/tmp/1.log"
spawn rsync -av /tmp/1.log root@192.168.2.116:/tmp/1.log
root@192.168.2.116's password:
sending incremental file list
1.logsent 429 bytes  received 31 bytes  920.00 bytes/sec
total size is 356  speedup is 0.77

20.33 构建文件分发系统

需求背景 :

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

实现思路:

首先要有一台模版机器,把要分发的文件准备好,然后只要使用expect脚本批量把需要同步的文件分发到目标机器即可

核心命令:

rsync -av --files-from=list.txt / root@$host:/

文件分发系统脚本

#! /usr/bin/expect
set passwd "123456"
set host [lindex $argv 0]                               //host是第一个变量,(指定IP)
set file [lindex $argv 1]                               //file是第二个变量
spawn rsync -av --files-from=$file / root@$host:/      //$file 是本机的文件到对方机器的文件.
expect {
"yes/no" {send "yes\r"}
"password:" {send "$passwd\r"}
}
expect eof说明:若不确定对方机器是否有相同的路径,那可以加 R (spawn rsync -avR --files-from=$file / root@$host:/  )加上R的话,即时对方机器没有相同的路径,也会自动创建.#添加执行权限
[root@root-01 test]# chmod a+x 6.expect

定义list.txt文件列表

说明:list.txt文件列表,路径必须是绝对路径

[root@root-01 test]# vim /tmp/list.txt/tmp/33.log
/root/2.txt
/root/test/ts/hh.txt

定义IP列表

说明:当上线的时候,需要同步的机器是不止一台,所以定义一个IP列表

[root@root-01 test]# vim /tmp/ip.txt192.168.2.116
127.0.0.1

定义同步脚本

[root@root-01 test]# vim rsync.sh#! /bin/bash
for ip in `cat /tmp/ip.txt`
do./6.expect $ip /tmp/list.txt        //执行6.expect 后面跟第一个参数ip; 第二个参数是跟文件列表
done

执行rsync.sh

说明 :192.168.2.116这台机器同步成功,而127.0.0.1因为错误未能同步成功
           特别提示必须要保证所有同步的机器的密码一致.

[root@root-01 test]# sh -x rsync.sh
++ cat /tmp/ip.txt
+ for ip in '`cat /tmp/ip.txt`'
+ ./6.expect 192.168.2.116 /tmp/list.txt
spawn rsync -avR --files-from=/tmp/list.txt / root@192.168.2.116:/
root@192.168.2.116's password:
building file list ... done
root/
root/2.txt
root/test/
root/test/ts/
root/test/ts/hh.txt
tmp/
tmp/33.logsent 770790 bytes  received 81 bytes  308348.40 bytes/sec
total size is 770407  speedup is 1.00
+ for ip in '`cat /tmp/ip.txt`'
+ ./6.expect 127.0.0.1 /tmp/list.txt
spawn rsync -avR --files-from=/tmp/list.txt / root@127.0.0.1:/
The authenticity of host '127.0.0.1 (127.0.0.1)' can't be established.
ECDSA key fingerprint is bd:fd:56:cf:07:80:0d:a6:9c:38:00:be:33:1f:f5:7a.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '127.0.0.1' (ECDSA) to the list of known hosts.
root@127.0.0.1's password: [root@root-01 test]# #查看192.168.2.116机器上是否有/root/test/ts/hh.txt[root@root-02 ~]# ls -l /root/test/ts/hh.txt
-rw-r--r-- 1 root root 0 9月  21 11:20 /root/test/ts/hh.txt说明:是有/root/test/ts/hh.txt的,说明同步成功.

20.34 批量远程执行命令

说明:例如在传输文件之后,还需要做一些操作,重启Nginx服务或重启php服务

[root@root-01 test]# vim 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"

定义执行脚本

[root@root-01 test]# vim exe.sh#! /bin/bash
for ip in `cat /tmp/ip.txt`
do./exe.expect $ip "hostnamectl set-hostname root-03"     //执行./exe.expect 脚本 后面第一个参数Ip 和第二个参数执行的命令
done

执行exe.sh脚本

[root@root-01 test]# sh -x exe.sh
++ cat /tmp/ip.txt
+ for ip in '`cat /tmp/ip.txt`'
+ ./exe.expect 192.168.2.116 'hostnamectl set-hostname root-03'
spawn ssh root@192.168.2.116
root@192.168.2.116's password:
Last login: Thu Sep 21 10:22:57 2017 from 192.168.2.102
[root@root-02 ~]# hostnamectl set-hostname root-03说明:执行的命令是设置hostname,可以看到原本是root-02,执行脚本后就设置成了root-03

转载于:https://my.oschina.net/AnnaWu/blog/1541066

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

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

    2019独角兽企业重金招聘Python工程师标准>>> expect脚本同步文件 更改权限 执行脚本 查看执行结果 expect eof需要加上,作用是等脚本命令执行完再进行退出 e ...

  2. ansible介绍、安装、远程执行命令、拷贝文件或目录、远程执行脚本、管理任务计划、安装包和管理服务、playbook、变量、循环、条件判断、handlers、安装nginx、管理配置文件

    24.15 ansible介绍 ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.cfengine.chef.func.fabric)的优点,实现了批量系 ...

  3. Ansible介绍、安装、远程执行命令、拷贝文件或者目录、远程执行脚本

    Ansible介绍 不需要安装客户端,通过sshd去通信 基于模块工作,模块可以由任何语言开发 不仅支持命令行使用模块,也支持编写yaml格式的playbook,易于编写和阅读 安装十分简单,cent ...

  4. 20.27分发系统介绍;20.28expect脚本远程登录;20.29expect脚本远程执行命令;20.30expect脚本传递参数...

    20.27 分发系统介绍 shell项目-分发系统-expect 20.28 expect脚本远程登录 1. 安装expect [root@hao-01 ~]# yum install -y expe ...

  5. Python_编写UDP通信编解码类、文件的上传、远程执行命令、黏包

    1.UDP通信编解码类 (1) 类 1 # ------------------UDP通信解码编码类------------------------ 2 3 from socket import * ...

  6. linux远程脚本事例,ssh远程执行命令方法和Shell脚本实例

    写这篇博客之前,我google了一堆相关文章,大都是说修改/etc/sudoers,然后NOPASSWD:指定的cmd,但是真心不管用,没有远程虚拟终端这个方法就是浮云,ubuntu10.04 ser ...

  7. linux远程执行本地脚本,ssh远程执行命令方法和Shell脚本实例

    写这篇博客之前,我google了一堆相关文章,大都是说修改/etc/sudoers,然后NOPASSWD:指定的cmd,但是真心不管用,没有远程虚拟终端这个方法就是浮云,ubuntu10.04 ser ...

  8. Linux Shell脚本专栏_批量主机远程执行命令脚本_08

    文章目录 1. 安装expect 2. 脚本制作 3. 赋予权限 4. 运行脚本 5. 直接运行脚本 6. vmstat测试 1. 安装expect [root@localhost ~]# yum i ...

  9. ssh远程执行python本地脚本_ssh远程执行命令方法和Shell脚本实例

    写这篇博客之前,我google了一堆相关文章,大都是说修改/etc/sudoers,然后NOPASSWD:指定的cmd,但是真心不管用,没有远程虚拟终端这个方法就是浮云,ubuntu10.04 ser ...

最新文章

  1. new一个新对象的时候,各属性方法的操行顺序
  2. web安全之文件上传漏洞攻击与防范方法
  3. OpenCASCADE绘制测试线束:几何命令之Intersections
  4. Gartner:全行业投入人工智能,计算机视觉占比最高
  5. hql mysql查询语句,HQL查询语言的使用介绍
  6. linux的cimserver是什么服务,openpegasus的启动方式(即cimserver的启动方式)
  7. C/C++[codeup 1785]字符串连接
  8. 学习自媒体究竟要投入多少?
  9. DDD.实践思考随笔,看书不在所而在于自己有多少思考
  10. linux带page参数报错,Linux配置hugepage
  11. latex编译报错:Font ntx-Regular- tlf-ot1r at 438 not found
  12. pdf密码忘了怎么解除
  13. 【离散数学】编程练习:求偏序集中的极大元与极小元
  14. Eclipse/Myeclipse自定义JSP模板
  15. 上高职业技术学校计算机学几年,上高县职业技术学校简介|上高县职业技术学校介绍...
  16. 永恒之蓝漏洞ms17-010
  17. 工作三年的前端开发20k简历标准
  18. Linux mkdir 命令使用介绍
  19. Pytorch —— nn.Module类(nn.sequential)
  20. 关于png的交错Interlace

热门文章

  1. Travis CI : 最小的分布式系统(三)
  2. c7pro android7,三星c7pro和iphone7哪个值得买?三星Galaxy c7 pro和苹果iphone7区别对比详细评测...
  3. js增加属性_前端js基础2
  4. yum安装mysql后密码_Centos7:yum安装MySQL5.7后如何设置root密码
  5. 极小连通子图和极大连通子图_强连通分量与拓扑排序
  6. springboot 订单重复提交_Spring Boot (一) 校验表单重复提交
  7. tp数组转为json_数据存储—JSON
  8. 【javaweb】eclipse重启后tomcat打不开解决方法
  9. 【js】common.jsp的使用
  10. Mac 安装多个版本jdk