博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2018-10-27
阅读量:5172 次
发布时间:2019-06-13

本文共 2989 字,大约阅读时间需要 9 分钟。

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/expectset user "root"set host "192.168.32.102"set passwd "123456789"spawn ssh $user@$hostexpect {"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@$hostexpect {"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/expectset 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/expectset passwd "123456789"set host [lindex $argv 0]set file [lindex $argv 1]spawn rsync -av $file root@$host:$fileexpect {"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/expectset 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.list192.168.32.102192.168.32.103[root@localhost sbin]# vim /tmp/file.list/tmp/test/tmp/test.aa[root@localhost sbin]# vim rsync.sh#!/bin/bashfor i in `cat /tmp/ip.list`do        ./rsync.exp $i /tmp/file.listdone[root@localhost sbin]# sh rsync.sh
20.34 批量远程执行命令
[root@localhost sbin]# vim exe.exp#!/usr/bin/expectset passwd "123456789"set host [lindex $argv 0]set cmd [lindex $argv 1]spawn ssh root@$hostexpect {"yes/no" {send "yes\r"}"password:" {send "$passwd\r"}}expect "]*"send "$cmd\r"expect "]*"send "exit\r"[root@localhost sbin]# vim exe.sh#!/bin/bashfor i in `cat /tmp/ip.list`do        echo $i        ./exe.exp $i "service nginx restart"done[root@localhost sbin]# sh exe.sh

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

你可能感兴趣的文章
SpringBoot 使用 MyBatis 分页插件 PageHelper 进行分页查询
查看>>
《DSP using MATLAB》Problem 6.17
查看>>
微信公众平台开发实战Java版之如何网页授权获取用户基本信息
查看>>
一周TDD小结
查看>>
sizeof与strlen的用法
查看>>
Linux 下常见目录及其功能
查看>>
开源框架中常用的php函数
查看>>
nginx 的提升多个小文件访问的性能模块
查看>>
set&map
查看>>
集合类总结
查看>>
4.AE中的缩放,书签
查看>>
给一次重新选择的机会_您还会选择程序员吗?
查看>>
Mysql MHA高可用集群架构
查看>>
心急的C小加
查看>>
编译原理 First,Follow,select集求法
查看>>
iOS开发 runtime实现原理以及实际开发中的应用
查看>>
android 学习资源网址
查看>>
qt安装遇到的错误
查看>>
java:Apache Shiro 权限管理
查看>>
objective c的注释规范
查看>>