20.27 分发系统介绍

公司的网站本来已经建好了,当公司的业务越来l越大时候就会需要实时更新代码,由于后端服务器有很多台来跑web服务。此时为了快速更新代码就可以使用分发系统。其中开源的上线代码的软件有很多,git等等。这里我们使用shell来编写一个分发系统来上线代码。核心使用expect脚本语言,它可以实现远程执行命令,远程传输数据等操作

20.28 expect脚本远程登录
[root@localhost ~]# yum install -y expect
[root@localhost ~]# cd /usr/local/sbin/
[root@localhost sbin]# vim expect1.exp
#!/usr/bin/expect
#定义变量
set host "192.168.32.102"
set passwd "123456789"
#执行命令
spawn ssh root@$host
#与远程机器交互,截取特定信息,发送变量,\r表示回车,interact表示继续交互不退出远程机器,expect eof表示停留远程机器上一会儿再退出
expect {
"yes/no" { send "yes\r";exp_continue }
"password:" { send "$passwd\r" }
}
interact

为了让远程登录时候出现提示,可以清空/root/.ssh/known_hosts文件

20.29 expect脚本远程执行命令
[root@localhost sbin]# vim expect2.exp
#!/usr/bin/expect
set user "root"
set host "192.168.32.102"
set passwd "123456789"
spawn ssh $user@$host
expect {
"yes/no" {send "yes\r";exp_continue}
"password:" {send "$passwd\r"}
}
expect "]*"
send "touch /tmp/test.aa\r"
expect "]*"
send "echo 111 >/tmp/test.aa\r"
expect "]*"
send "exit\r"
20.30 expect脚本传递参数
[root@localhost sbin]# vim expect3.exp
#!/usr/bin/expect
#[lindex $argv 0]表示要输入的第一个参数 如此类推
set user [lindex $argv 0]
set host [lindex $argv 1]
set passwd "123456789"
set cmd [lindex $argv 2]
spawn ssh $user@$host
expect {
"yes/no" {send "yes\r"}
"password:" {send "$passwd\r"}
}
expect "]*"
send "$cmd\r"
#set timeout -1
#指定命令的超时时间 -1为永远
expect "]*"
send "exit\r"
[root@localhost sbin]# ./expect3.exp root 192.168.32.102 "ls;w"
20.31 expect脚本同步文件
[root@localhost sbin]# vim expect4.exp
#!/usr/bin/expect
set passwd "123456789"
spawn rsync -av root@192.168.32.102:/tmp/test.aa /tmp/
expect {
"yes/no" {send "yes\r"}
"password:" {send "$passwd\r"}
}
expect eof
20.32 expect脚本指定host和要同步的文件

[root@localhost sbin]# vim expect5.exp
#!/usr/bin/expect
set passwd "123456789"
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
[root@localhost sbin]# ./expect5.exp 192.168.32.102 /tmp/test
20.33 构建文件分发系统
[root@localhost sbin]# vim rsync.exp
#!/usr/bin/expect
set passwd "123456789"
set host [lindex $argv 0]
set file [lindex $argv 1]
#--file-from指定文件列表路径 -R表示同步时目标会级联创建目录
spawn rsync -avR --files-from=$file / root@$host:/
expect {
"yes/no" {send "yes\r"}
"password:" {send $passwd\r}
}
expect eof
[root@localhost sbin]# vim /tmp/ip.list
192.168.32.102
192.168.32.103
[root@localhost sbin]# vim /tmp/file.list
/tmp/test
/tmp/test.aa
[root@localhost sbin]# vim rsync.sh
#!/bin/bash
for i in `cat /tmp/ip.list`
do./rsync.exp $i /tmp/file.list
done
[root@localhost sbin]# sh rsync.sh
20.34 批量远程执行命令
[root@localhost sbin]# vim exe.exp
#!/usr/bin/expect
set passwd "123456789"
set host [lindex $argv 0]
set cmd [lindex $argv 1]
spawn ssh root@$host
expect {
"yes/no" {send "yes\r"}
"password:" {send "$passwd\r"}
}
expect "]*"
send "$cmd\r"
expect "]*"
send "exit\r"
[root@localhost sbin]# vim exe.sh
#!/bin/bash
for i in `cat /tmp/ip.list`
doecho $i./exe.exp $i "service nginx restart"
done
[root@localhost sbin]# sh exe.sh

转载于:https://www.cnblogs.com/2KP2/p/9875535.html

2018-10-27相关推荐

  1. ssl提高组周六备考赛【2018.10.27】

    前言 高三dalao试图混入其中 成绩 RankRankRank PersonPersonPerson ScoreScoreScore AAA BBB CCC 111 2017myself2017my ...

  2. 2018.10.27 bzoj3209: 花神的数论题(数位dp)

    传送门 数位dpdpdp经典题. 题面已经暗示了我们按照二进制位来数位dpdpdp. 直接dpdpdp多少个数有111个111,222个111,333个111-, 然后快速幂算就行了. 于是我们枚举前 ...

  3. 【2018/10/27测试T1】洛阳怀

    [题目] 传送门 [分析] 其实这道题似乎没有想象中的那么难 先说一下如何求 f(x)f(x)f(x) 吧,对 xxx 分解质因数,在这些质因数中,f(x)f(x)f(x) 就是好质数个数减去坏质数个 ...

  4. 10天精读掌握:计算机组成与设计COAD:Patterson and Hennessy 第6天 2018/10.31

    10天精读掌握:计算机组成与设计COAD:Patterson and Hennessy 第6天 2018/10.31 1. 第4次周计划概览 2. 今日学习成果 3. 今日时间表 4. 今日反思 5. ...

  5. 10天精读掌握:计算机组成与设计COAD:Patterson and Hennessy 第5天 2018/10.30

    10天精读掌握:计算机组成与设计COAD:Patterson and Hennessy 第5天 2018/10.30 1. 第4次周计划概览 2. 今日学习成果 3. 今日时间表 4. 今日反思 今天 ...

  6. 10天精读掌握:计算机组成与设计(COAD:Patterson and Hennessy) (第4天 2018/10.29)

    10天精读掌握:计算机组成与设计COAD:Patterson and Hennessy 第4天 2018/10.29 1. 第4次周计划概览 2. 今日学习成果 3. 今日时间表 4. 今日反思 5. ...

  7. Python学习之路—2018/6/27

    Python学习之路-2018/6/27 1.多表操作 添加记录 添加多对多关系 方式一:传入Author对象 book = Book.objects.get(bid=1) gy = Author.o ...

  8. Daily Scrum 10.27

    今天毛宇已经完成了游戏每个模块的整体设计,并且大家聚在一起,对这些模块进行了具体的讨论和分析,包括模块的具体功能.接口.模块儿间的交互,以及注释的规范等等.大家看到彼此都能够按时完成任务,并且同步地进 ...

  9. 2018.10.17考试

    2018.10.17考试总结 1.咒语 (curse.pas/c/cpp) [题目描述] 亮亮梦到自己来到了魔法城堡, 但一扇巨大的石门阻拦了他通向城堡内的路.正当他沮丧之际,突然发现门上有一处机关, ...

  10. 20172319 2018.10.12《Java程序设计教程》第6周课堂实践(补写博客)

    20172319 2018.10.12 <Java程序设计教程>第6周课堂测验 课程:<程序设计与数据结构> 班级:1723 学生:唐才铭 学号:20172319 指导老师:王 ...

最新文章

  1. 用python创建一个目录
  2. 美多商城之验证码(图形验证码)
  3. 以下选项不是python打开方式的是-关于文件的打开方式,以下选项中描述正确的是...
  4. python读取本地文件-python解析本地HTML文件
  5. java对象数组覆盖_java – 如何覆盖RAML 1.0中的对象数组属性类型
  6. glide默认的缓存图片路径地址_手写一个静态资源中间件,加深了解服务器对文件请求的缓存策略...
  7. 思科nat配置实例_Cisco ASA 5520(8.2.4)配置企业内网案例
  8. linux here用法,linux shell的here document用法(cat EOF)
  9. python界面编程 plc_在python gui编程怎么运行
  10. SpringBoot 启动失败 Failed to determine a suitable driver class 问题解决方案
  11. LeetCode简单题目(#172 #189 #190 #191 #198 #202)-6道(序列、数字)
  12. python deap_DEAP(Distributed Evolutionary Algorithms in Python)1.2.2文档(一)
  13. Linux内核分析学习路线总结(内核人员必看)
  14. C# XmlDocument.Save文件操作System.IO.IOException:The process cannot access the file because it is being
  15. excel导出设置自动列宽
  16. [C语言] PTA 7-55 查询水果价格
  17. UE4中VR项目的打包和发布
  18. 怎样更改计算机文件名,电脑如何批量修改文件名|批量修改文件名的几个小方法...
  19. 2021抖音数据报告
  20. 网络其他计算机无法访问,win7局域网别人无法访问我的电脑是为什么_win7其他电脑无法访问我的电脑如何修复-win7之家...

热门文章

  1. mysql 写入性能_MySQL存储写入性能严重抖动分析
  2. vue基础之组件(创建,data,切换,父子以及同级之间的传值,插槽solt)
  3. 阶段1 语言基础+高级_1-3-Java语言高级_08-JDK8新特性_第3节 两种获取Stream流的方式_8_Stream流中的常用方法_skip...
  4. zencart 对首页静态化处理
  5. C++ 内存分配(new,operator new)详解
  6. wxPython练习
  7. 使用Entity Framwork 保存数据时,提示不能在对象中插入重复键,违反了PRIMARY_KEY约束...
  8. [连载]《C#通讯(串口和网络)框架的设计与实现》-1.通讯框架介绍
  9. SqlDataReader.GetFloat出错,类型无法转换
  10. Could not resolve type alias ‘‘