2018-4-27 18周2次课 分发系统-expect讲解(下)

20.31 expect脚本同步文件

·自动同步文件

[[email protected] sbin]# chmod a+x 4.expect
[[email protected] sbin]# ./4.expect
spawn rsync -av [email protected]:/tmp/12.txt /tmp/
[email protected]'s password:
receiving incremental file list
12.txt
sent 30 bytes  received 84 bytes  76.00 bytes/sec
total size is 5  speedup is 0.04
[[email protected] sbin]# cat /tmp/12.txt
1212

(脚本结尾需要加 expect eof 或者 interact )





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

·指定host和要同步的文件

(file一定要写绝对路径)

[[email protected] sbin]# chmod a+x 5.expect
[[email protected] sbin]# ./5.expect 192.168.65.129 "/tmp/12.txt"
spawn rsync -av /tmp/12.txt [email protected]:/tmp/12.txt
[email protected]'s password:
sending incremental file list
sent 31 bytes  received 12 bytes  86.00 bytes/sec
total size is 5  speedup is 0.12





20.33 构建文件分发系统


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

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

·核心命令rsync -av --files-from=list.txt  /  [email protected]:/

·文件分发系统的实现

·rsync.expect 内容

·/tmp/list.txt内容

·ip list 文件:/tmp/ip.txt

192.168.65.129

·rsync.sh内容

[[email protected] sbin]# chmod a+x rsync.expect
[[email protected] sbin]# sh -x rsync.sh
++ cat /tmp/ip.txt
+ for ip in '`cat /tmp/ip.txt`'
+ echo 192.168.65.129
192.168.65.129
+ ./rsync.expect 192.168.65.129 /tmp/list.txt
spawn rsync -av --files-from=/tmp/list.txt / [email protected]:/
[email protected]'s password:
building file list ... done
root/
root/111/222/
root/111/222/test.txt
root/shell/
root/shell/01.sh
tmp/
tmp/12.txt
sent 369 bytes  received 81 bytes  900.00 bytes/sec
total size is 71  speedup is 0.16

(在129机器上也可以查看到同步过去的文件)

·思路:

执行 rsync.expect 脚本并且要传递两个参数

而其中之一是多个ip中的一个,把 ip 写到一个文本中,for 循环依次去读一个ip,并传递到脚本中去

在 shell 脚本中写此 for 循环,可以执行

把需要同步的文件绝对目录写入到 list.txt 中,这样可以将需要同步的目录依次同步到 ip.txt 中的机器





20.34 批量远程执行命令

·exe.expect 内容

·exe.sh 内容

·执行脚本

[[email protected] sbin]# sh exe.sh
192.168.65.129
spawn ssh [email protected]
[email protected]'s password:
Last login: Thu Apr 26 00:10:01 2018 from 192.168.65.128
[[email protected] ~]# w;free -m;ls /tmp
00:13:10 up  1:35,  2 users,  load average: 0.01, 0.02, 0.05
USER     TTY      FROM             [email protected]   IDLE   JCPU   PCPU WHAT
root     pts/0    192.168.65.1     22:38   23:42   0.23s  0.23s -bash
root     pts/1    192.168.65.128   00:13    0.00s  0.05s  0.03s w
total        used        free      shared  buff/cache   available
Mem:            976         589         116           6         271         212
Swap:          2047           0        2047
12.txt         systemd-private-606af9ac8a8c48d8bd2a5d7938fec6e8-chronyd.service-Tv9azy
alex.sock     systemd-private-606af9ac8a8c48d8bd2a5d7938fec6e8-vgauthd.service-aii2pH
mysql.sock     systemd-private-606af9ac8a8c48d8bd2a5d7938fec6e8-vmtoolsd.service-6NjtpQ
php-fcgi.sock  test.com.log

原文地址:http://blog.51cto.com/11530642/2107911

时间: 2024-11-09 17:51:28

2018-4-27 18周2次课 分发系统-expect讲解(下)的相关文章

2018-4-25 18周1次课 分发系统-expect讲解(上)

20.27 分发系统介绍 由于业务迭代更新,需要更改代码,如果机器很多,那么久需要一个分发系统,可以把每段时间更新的代码分别发布到机器上去 分发系统就是上线的shell脚本,核心为expect expect是一种脚本语言,和shell很像,可以用它去实现传输文件和远程执行命令,不需要去输入密码 20.28 expect脚本远程登录 [[email protected] ~]# yum install -y expect (过程省略) ·自动远程登录 expect中定义变量和shell中的区别 s

2018.4.25 18周1次课

十八周一次课(4月25日) 20.27 分发系统介绍 20.28 expect脚本远程登录 20.29 expect脚本远程执行命令 20.30 expect脚本传递参数 20.27 分发系统介绍 expect是一种能够按照脚本内容里面设定的方式与交互式程序进行"会话"的程序.根据脚本内容,Expect可以知道程序会提示或反馈什么内容以及什么是正确的应答.它是一种可以提供"分支和嵌套结构"来引导程序流程的解释型脚本语言. 我们熟知的shell编程功能虽然很强大,但是

2018.2.27 9周5次课

九周第五次课(2月27日) 11.6 MariaDB安装 11.7/11.8/11.9 Apache安装 11.6 MariaDB安装 cd /usr/local/src 下载二进制安装包:wget https://downloads.mariadb.com/MariaDB/mariadb-10.2.6/bintar-linux-glibc_214-x86_64/mariadb-10.2.6-linux-glibc_214-x86_64.tar.gz 解压安装包:tar -zxvf mariad

2018.3.27 二周第二次课

1. 环境变量PATH 命令介绍:which 查找某个命令的绝对路径!$ 这个命令可以查看你最后一个命令的参数 (上一条命令最后一个参数)例:tree !$cp -r 如果目标目录存在的话,则会拷贝到目标目录下的目录里面,如果目标目录不在的话,则会创建目录放置那里.wc 可以查看一个文件的行数有多少, 语法:wc -l anaconda-ks.cfg.1 # -l后面跟要查看的文件相对路径或绝对路径 1.1 PATH环境变量 如何自定义环境变量 例:假设把ls命令换成ls2并且实现ls的功能,我

2018.1.9 5周2次课

五周第二次课(1月9日) 7.6 yum更换国内源 7.7 yum下载rpm包 7.8/7.9 源码包安装 7.6 yum更换国内源 1.恢复之前备份的文件 2. 进入"/etc/yum.repos.d"目录 3.删除"CentOS-Base.repo"文件 4.下载"163.repo"文件 wget http://mirrors.163.com/.help/CentOS7-Base-163.repo curl -O http://mirrors

2018.1.11 5周4次课

五周第四次课(1月11日) 8.6 管道符和作业控制 8.7/8.8 shell变量 8.9 环境变量配置文件 8.6 管道符和作业控制 1. 管道符 前面已经提过管道符|,它用于将前一个指令的输出作为后一个指令的输人. 2. 作业控制 当运行进程时,常用的命令如下: 暂停:按ctrl+Z组合键 fg n:(foreground的简写)恢复第n个进程运行 bg n:(backgroup的简写)把第n个进程放到后台运行 终止:按ctrl+C组合键 jobs:把暂停或在后台的任务列出来. 命令 &:

2018.1.16 6周2次课

六周第二次课(1月16日) 9.4/9.5 sed 9.4/9.5 sed 其实grep工具的功能还不够强大,它实现的只是查找功能,而不能把查找的内容替换.以前用vim操作文档的时候,可以查找也可以替换, 但只限于在文本内部操作,而不能输出到屏幕上.sed工具以及后面要介绍的awk工具就能把替换的文本输出到屏幕上,而且还有其他更丰富的功能.sed和awk都是流式编辑器,是针对文档的行来操作的. sed  '/x/'p filename:匹配x字符 sed  -n  '/x/'p  filenam

2018.3.1 10周2次课

十周第二次课(3月1日) 11.14/11.15 Apache和PHP结合 11.16/11.17 Apache默认虚拟主机 11.14/11.15 Apache和PHP结合 配置httpd支持php httpd主配置文件/usr/local/apache2.4/conf/httpd.conf vim /usr/local/apache2.4/conf/httpd.conf   //修改以下4个地方 ServerName 搜索ServerName,把#ServerName www.example

2018.4.23 17周4次课

十七周4次课(4月23日) 20.20 告警系统主脚本 20.21 告警系统配置文件 20.22 告警系统监控项目 20.20 告警系统主脚本 创建告警系统的目录: [[email protected] /usr/local/sbin]# mkdir mon [[email protected] /usr/local/sbin]# ls mon  nginx_log_rotate.sh [[email protected] /usr/local/sbin]# cd mon [[email pro