文档章节

Shell编程(expect同步文件、指定host和同步文件、构建文件分发系统、批量执行命令)

蛋黄_Yolks
 蛋黄_Yolks
发布于 09/26 00:25
字数 1348
阅读 14
收藏 2

expect脚本同步文件

需求:自动同步文件 实验准备:

  • A机器:192.168.248.130
  • B机器:192.168.248.129 实现:

1.A机器编写4.expect脚本文件,内容如下所示:

#!/usr/bin/expect
set passwd "123456"
spawn rsync -av root@192.168.248.129:/tmp/12.txt /tmp/
expect {
"yes/no" { send "yes\r"}
"password:" { send "$passwd\r" }
}

expect eof #至关重要的一步设置,如果不加这条语句,那么还没有开始执行数据传输,就马上结束了,甚至有可能还没有远程登录成功,就已经退出来了,所以脚本里面必须要加这条语句。

2.执行权限

chmod a+x 4.expect

3.执行脚本

[root@yolks3 ~]# ./4.expect 
spawn rsync -av root@192.168.248.129:/tmp/12.txt /tmp/
couldn't execute "rsync": no such file or directory
    while executing
"spawn rsync -av root@192.168.248.129:/tmp/12.txt /tmp/"
    (file "./4.expect" line 3)

报错了,神奇的海螺。查询报错:couldn't execute "rsync",使用yum安装

yum -y install rsync

再次执行:已经ok,可以查看文件和大小

[root@yolks3 ~]# ./4.expect 
spawn rsync -av root@192.168.248.129:/tmp/12.txt /tmp/
root@192.168.248.129's password: 
receiving incremental file list
12.txt

sent 43 bytes  received 97 bytes  280.00 bytes/sec
total size is 5  speedup is 0.04
[root@yolks3 ~]# cat /tmp/12.txt 
1212
[root@yolks3 ~]# ls -lh /tmp/12.txt 
-rw-r--r-- 1 root root 5 9月  24 21:10 /tmp/12.txt

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

之前的3.expect文件默认是10秒钟超时,当然也是可以增加超时时间甚至可以让永久不超时。

只需要在脚本文件中添加第3行set timeout语句即可

expect "]*"
send "$cm\r"
set timeout 3  设置超时秒数,如果是-1表示永久不会超时
expect "]*"
send "exit\r"

需求:参数指定host和要同步的文件,这种方式只适合同步一个文件。 实现:

1.编写脚本5.expect文件,脚本内容如下所示:

#!/usr/bin/expect
set passwd "123456"
set host [lindex $argv 0] #第一个变量是主机host(也就是主机IP地址)
set file [lindex $argv 1] #第二个变量是要同步的文件
spawn rsync -av $file root@$host:$file #这里是从本机到对方,而且file要写绝对路径。
expect {
"yes/no" { send "yes\r"}
"password:" { send "$passwd\r" }
}
expect eof

2.执行权限

chmod a+x 5.expect

3.执行

[root@yolks3 ~]# ./5.expect 192.168.248.129 "/tmp/12.txt"
spawn rsync -av /tmp/12.txt root@192.168.248.129:/tmp/12.txt
root@192.168.248.129's password: 
sending incremental file list

sent 45 bytes  received 12 bytes  114.00 bytes/sec
total size is 5  speedup is 0.09

构建文件分发系统

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

实现思路:首先要有一台模板机器,把要分发的文件准备好,然后只要使用expect脚本批量把需要同步的文件分发到目标机器即可。
核心命令:rsync -av --files-from=list.txt / root@host:/
实现:

1.编写 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:/ #如果不确定对方机器有相同的路径,可以加-avR
expect {
"yes/no" { send "yes\r"}
"password:" { send "$passwd\r" }
}
expect eof

2.编写文件列表 /tmp/file.list,内容如下:

/tmp/12.txt
/tmp/yolks.file

3.编写IP地址列表文件 /tmp/ip.list

192.168.248.129
192.168.248.130

4.创建 rsync.sh shell文件

#!/bin/bash
 for ip in `cat /tmp/ip.list`
 do
    ./rsync.expect $ip /tmp/file.list
done

5.执行rsync.sh

1)执行权限

[root@yolks3 ~]# chmod a+x rsync.expect

2)执行shell脚本:rsync.sh

[root@yolks3 ~]# sh -x rsync.sh
++ cat /tmp/ip.list
+ for ip in '`cat /tmp/ip.list`'
+ ./rsync.expect 192.168.248.130 /tmp/file.list
spawn rsync -avR --files-from=/tmp/file.list / root@192.168.248.130:/
root@192.168.248.130's password: 
building file list ... done

sent 95 bytes  received 12 bytes  214.00 bytes/sec
total size is 5  speedup is 0.05
+ for ip in '`cat /tmp/ip.list`'
+ ./rsync.expect 192.168.248.129 /tmp/file.list
spawn rsync -avR --files-from=/tmp/file.list / root@192.168.248.129:/
root@192.168.248.129's password: 
building file list ... done
tmp/
tmp/yolks.file

sent 137 bytes  received 38 bytes  350.00 bytes/sec
total size is 5  speedup is 0.03

在192.168.248.129机器上,可以查看到刚才远程同步的2个文件。

[root@yolks2 ~]# ls -lt /tmp/12.txt /tmp/yolks.file 
-rw-r--r-- 1 root root 0 9月  26 00:15 /tmp/yolks.file
-rw-r--r-- 1 root root 5 9月  24 21:10 /tmp/12.txt

批量远程执行命令

想批量远程执行命令,可以通过2个脚本来实现。

1.创建 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.添加执行权限

[root@yolks3 ~]# chmod a+x exe.expect

3.创建 exe.sh shell脚本

#!/bin/bash
 for ip in `cat /tmp/ip.list`
 do
     ./exe.expect $ip "hostname"
 done

4.执行

[root@yolks3 ~]# sh -x exe.sh 
++ cat /tmp/ip.list
+ for ip in '`cat /tmp/ip.list`'
+ ./exe.expect 192.168.248.130 hostname
spawn ssh root@192.168.248.130
root@192.168.248.130's password: 
Last failed login: Wed Sep 26 00:11:24 CST 2018 from 192.168.248.130 on ssh:notty
There were 5 failed login attempts since the last successful login.
Last login: Tue Sep 25 22:42:14 2018 from 192.168.248.1
[root@yolks3 ~]# hostname
yolks3
[root@yolks3 ~]# + for ip in '`cat /tmp/ip.list`'
+ ./exe.expect 192.168.248.129 hostname
spawn ssh root@192.168.248.129
root@192.168.248.129's password: 
Last failed login: Wed Sep 26 00:11:34 CST 2018 from 192.168.248.130 on ssh:notty
There were 3 failed login attempts since the last successful login.
Last login: Tue Sep 25 22:42:17 2018 from 192.168.248.1
[root@yolks2 ~]# hostname
yolks2
[root@yolks2 ~]# [root@yolks3 ~]# 

扩展

shell多线程 http://blog.lishiming.net/?p=448

© 著作权归作者所有

蛋黄_Yolks
粉丝 8
博文 100
码字总数 112269
作品 0
通州
20.31 expect脚本同步文件;20.32 expect脚本指定host和要同步的文件;

20.31 expect脚本同步文件;20.32 expect脚本指定host和要同步的文件;20.33 构建文件分发系统;20.34 批量远程执行命令 20.31 expect脚本同步文件 自动同步文件 1. 同步远程机器hao2上/tmp/...

主内安详
05/03
0
0
2018-4-27 18周2次课 分发系统-expect讲解(下)

20.31 expect脚本同步文件 ·自动同步文件 [root@localhost sbin]# chmod a+x 4.expect[root@localhost sbin]# ./4.expectspawn rsync -av root@192.168.65.129:/tmp/12.txt /tmp/root@192.......

alexis7gunner
04/26
0
0
expect脚本同步文件、expect脚本指定host和要同步的文件、构建文件分发系统

expect脚本同步文件 更改权限 执行脚本 查看执行结果 expect eof需要加上,作用是等脚本命令执行完再进行退出 expect脚本指定host和要同步的文件 更改权限,执行脚本 构建文件分发系统 需求背...

Zhouliang6
07/21
0
0
20.31 expect脚本同步文件 20.32 expect脚本指定host和要同步的文件 20.33 构建文件分发系统 20.34 批量远程执行命令

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

夜归人8421
04/25
0
0
linux复盘:expect构建文件分发系统

需求:开发人员开发的代码发布到线上环境中(其实后面用到jenkins才是真正的98k) expect可以让我们实现自动登录远程机器,并且可以实现自动远程执行命令。当然若是使用不带密码的密钥验证同...

历经35天的选择
02/10
13
0

没有更多内容

加载失败,请刷新页面

加载更多

线性一致性和 Raft

作者:沈泰宁 在讨论分布式系统时,共识算法(Consensus algorithm)和一致性(Consistency)通常是讨论热点,两者的联系很微妙,很容易搞混。一些常见的误解:使用了 Raft [0] 或者 paxos ...

TiDB
20分钟前
0
0
兄弟连区块链教程以太坊源码分析core-state-process源码分析

## StateTransition状态转换模型 /* The State Transitioning Model 状态转换模型 A state transition is a change made when a transaction is applied to the cu......

兄弟连区块链入门教程
22分钟前
0
0
linear-gradient渐变中的参数

在看张鑫旭的博客 遇到渐变数值后面带参数不太理解 @supports (-webkit-mask: none) or (mask: none) { .box { border: none; background: linear-gradient(to bottom, #34538...

红羊在厦门
23分钟前
0
0
Python yagmail模块自动发邮件

Python发邮件yagmail模块 import yagmail#连接服务器yag=yagmail.SMTP('xx@163.com','yy','smtp.163.com')#邮箱正文contents=["test","email send"]#发送邮件#yag.send('...

小白兔_球球
24分钟前
1
0
pada mysql

CREATE SCHEMA `exchange` DEFAULT CHARACTER SET utf8mb4 ;

qwfys
33分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部