linux学习第七十篇:expect脚本同步文件,expect脚本指定host和要同步的文件,构建文件分发系统,批量远程执行命令

expect脚本同步文件

  • 自动同步文件
#!/usr/bin/expect
set passwd "123456"
spawn rsync -av root@192.168.133.132:/tmp/12.txt /tmp/
expect {
"yes/no" { send "yes\r"}
"password:" { send "$passwd\r" }
}
expect eof

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

  • 指定host和要同步的文件 把本机上的一个文件同步到远程机器上
#!/usr/bin/expect
set passwd "123456"
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

构建文件分发系统

  • 需求背景 对于大公司而言,肯定时不时会有网站或者配置文件更新,而且使用的机器肯定也是好多台,少则几台,多则几十甚至上百台。所以,自动同步文件是至关重要的。
  • 实现思路 首先要有一台模板机器,把要分发的文件准备好,然后只要使用expect脚本批量把需要同步的文件分发到目标机器即可。
  • 核心命令 rsync -av –files-from=list.txt / root@host:/
  • 文件分发系统的实现 rsync.expect 内容:
#!/usr/bin/expect
set passwd "123456"
set host [lindex $argv 0]
set file [lindex $argv 1]
spawn rsync -av --files-from=$file / root@$host:/
expect {
"yes/no" { send "yes\r"}
"password:" { send "$passwd\r" }
}
expect eof
  • ip.list内容,为需要同步的远程机器IP
192.168.133.132
192.168.133.133
  • list.txt内容,为同步的文件路径
/tmp/12.txt
/root/1.sh
/root/111/222/lll.txt
  • rsync.sh 内容
#!/bin/bash
for ip in `cat /tmp/ip.list` #要输入文档的绝对路径
do
    echo $ip
    ./rsync.expect $ip /tmp/list.txt
done

批量远程执行命令

  • 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"
  • exe.sh 内容
#!/bin/bash
for ip in `cat /tmp/ip.list`
do
    echo $ip
    ./exe.expect $ip ;w;free -m;ls /tmp
done

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏liulun

让git不再跟踪配置文件的变化

1402
来自专栏架构师之路

库存扣多了,到底怎么整 | 架构师之路

业务复杂、数据量大、并发量大的业务场景下,典型的互联网架构,一般会分为这么几层: 调用层,一般是处于端上的browser或者APP 站点层,一般是拼装html...

5627
来自专栏帘卷西风的专栏

关于linux服务器进程监控及自动重启的简单方案

转载请注明出处:帘卷西风的专栏(http://blog.csdn.net/ljxfblog)

2182
来自专栏架构师之路

session一致性架构设计实践

一、缘起 什么是session? 服务器为每个用户创建一个会话,存储用户的相关信息,以便多次请求能够定位到同一个上下文。 Web开发中,web-server可...

4619
来自专栏钟绍威的专栏

scope='request'的bean预加载冲突

Error creating bean with name ‘authenticationSuccessServlet’: Scope ‘request’ is...

1946
来自专栏游戏杂谈

替换系统自带的记事本

系统自带的记事本功能比较弱,所以一般我会选择使用notepad2.exe来替代它。

2733
来自专栏Python自动化测试

Python接口自动化测试之文件上传(二十二)

在接口测试中,经常会涉及到文件上传,文件上传一般包含的文件是图片,视频以及如csv,excel,记事本等文件,它的请求头中Content-Type对应...

7773
来自专栏后端技术探索

获取客户端的真实IP(而非代理服务器IP) 的一个实例

在api程序中,某个业务场景需要通过获取用户app的真实ip,因为中间通过代理代理服务器,用 REMOTE_ADDR 头信息肯定获取不到app的ip,从goog...

2471
来自专栏后端技术探索

狼厂项目实践:通用检索框架准实时流的设计与实现

检索对实时性的要求很高,不仅是对索引建立、结果召回、策略干扰等核心部分,也包括数据录入的部分。检索的数据流主要包括全量数据与增量数据,其中全量数据是在运行前就已...

891
来自专栏企鹅号快讯

利用Django在前端展示Oracle 状态趋势

开发环境 操作系统:CentOS 7.4 Python版本 :3.6 Django版本: 1.10.5 操作系统用户:oms 数据处理:pandas 前端展示:...

3027

扫码关注云+社区

领取腾讯云代金券