7月20日任务

课程名称:20.31 expect脚本同步文件

笔记内容:

自动同步文件

[root@localhost sbin]# vim 4.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

[root@localhost sbin]# chmod a+x 4.expect

a7706282923853032511f1d6a88375ef5ad.jpg

反面案例:

注:如果注释掉expect eof或者没这条就会没有传输就退出来

061047368ee3b87fe2bd4e82c33246838ac.jpg

af3358359b331bd7fbf289886c79bdcb2e6.jpg

 

并且设定运行时间也是无意义的

#!/usr/bin/expect

set passwd "123456"

spawn rsync -av root@1.1.1.1:/tmp/12.txt /tmp/

set timeout 20

expect {

"yes/no" { send "yes\r"}

"password:" { send "$passwd\r" }

}

#expect eof(必须要有)

d5269c37f05f288dae89e56af3cd24816b8.jpg

cb2e2fc9c3269fa4865063de042f930a52b.jpg

课程名称:20.32 expect脚本指定host和要同步的文件

笔记内容:

[root@localhost sbin]# vim 6.expect

#!/usr/bin/expect

set passwd "123456"

set host [lindex $argv 0]

set file [lindex $argv 1]  (file同步的文件,要写绝对路径)

spawn rsync -av $file root@$host:$file  (本机到对方)

expect {

"yes/no" { send "yes\r"}

"password:" { send "$passwd\r" }

}

expect eof

586de058dcb54eacbeff64c9dcc8ec05602.jpg

[root@localhost sbin]# chmod a+x 6.expect

只适合同步一个文件,本机同步到远程服务器

[root@localhost sbin]# ./6.expect 172.25.200.192 "/tmp/mysql.sock"

fba40c0a4d9d7729d58e760dd2d203eff66.jpg

beb782a890bc3ceca2ae3c220eecf3a4c76.jpg

课程名称:20.33 构建文件分发系统

笔记内容:

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

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

核心命令
rsync -av --files-from=list.txt  /  root@host:/

注:list.txt需要同步文件的文件列表,当文件量大时,--files-from就可以把文件列表中文件全部同步,文件列表中的文件路径必须是绝对路径,并且同步文件的路径对端服务器也必须要有(如果没有可以-R自动创建)

 

文件分发系统的实现

首先 rsync.expect内容

[root@localhost sbin]# vim rsync.expect

#!/usr/bin/expect

set passwd "123456"

set host [lindex $argv 0]

set file [lindex $argv 1]  (file指文件列表)

spawn rsync -Rav --files-from=$file / root@$host:/ (原目录时根目标也是根)

expect {

"yes/no" { send "yes\r"}

"password:" { send "$passwd\r" }

}

expect eof

8a922b033083cc5f3e28696dfeca4233f94.jpg

[root@localhost sbin]# chmod a+x rsync.expect

然后list.txt 文件列表(定义file)

[root@localhost sbin]# vim /tmp/list.txt

7ed30171d96edd38db94a8f374e5e4a5c1d.jpg

还需要ip.list (远程同步的服务器不止一台)

[root@localhost sbin]# vim /tmp/ip.list

ddcdac57f55c3a8fb12b4b4f73fe67ab2de.jpg

这里必须所有服务器的密码都是一致的,所以最好做密钥认证这样就不需要输入密码,而且很多都是密码不相同需要输密码

创建脚本rsync.sh (遍历下IP地址)

[root@localhost sbin]# vim rsync.sh

#!/bin/bash

for ip in `cat /tmp/ip.list`

do

echo $ip

./rsync.expect $ip /tmp/list.txt

done

dc2ffe9e31e7d7cb332bd2cf38f6c45f763.jpg

7e1fb8ce19b653e138249e1be0be6023a98.jpg

2bbeab695c4df618d28887eec221ea18c35.jpg

课程名称:20.34 批量远程执行命令

笔记内容:

自动化批量执行命令

[root@localhost sbin]# vim 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"

2752fdf436976e1396273d2d4d4d7fb80bb.jpg

[root@localhost sbin]# chmod a+x exe.expect

 

定义exe.sh脚本

[root@localhost sbin]# vim exe.sh

#!/bin/bash

for ip in `cat /tmp/ip.list`

do

echo $ip

./exe.expect $ip "w;free -m;ls /tmp"

done

a065875de70925a4c4560556476714703b1.jpg

 e2215035c9baeb2f3d4cbc322c7f805ab49.jpg

转载于:https://my.oschina.net/u/3803396/blog/1860966

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值