热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:expect脚本同步文件expect脚本指定host和要同步的文件构建文件分发系统批量远程执行

本文由编程笔记#小编为大家整理,主要介绍了expect脚本同步文件expect脚本指定host和要同步的文件构建文件分发系统批量远程执行相关的知识,希望对你有一定的参考价值。
本文由编程笔记#小编为大家整理,主要介绍了expect脚本同步文件 expect脚本指定host和要同步的文件 构建文件分发系统 批量远程执行相关的知识,希望对你有一定的参考价值。


一、expect脚本同步文件
技术分享图片
实例4:
自动同步文件
[[email protected] sbin]# vi 4.expect
#!/usr/bin/expect
set passwd "123456"
spawn rsync -av [email protected]:/tmp/12.txt /tmp/
expect {
"yes/no" { send "yes
"}
"password:" { send "$passwd
" }
}
expect eof

[[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 228.00 bytes/sec
total size is 5 speedup is 0.04
如果把脚本内容的最后一行expect eof注释掉,结果是:还没有来得及传输就直接退出来远程机器了
所以在脚本结尾一定要加上expect eof,特别是在传输文件的时候

二、expect脚本指定host和要同步的文件
技术分享图片
实例5:
指定host和要同步的文件
[[email protected] sbin]# vi 5.expect
#!/usr/bin/expect
set passwd "123456"
set host [lindex $argv 0]
set file [lindex $argv 1]
spawn rsync -av $file [email protected]$host:$file
expect {
"yes/no" { send "yes
"}
"password:" { send "$passwd
" }
}
expect eof

//第一个是主机host的IP,第二个是要同步的文件,文件是从本机到对方,而且file一定要写绝对路径
[[email protected] sbin]# chmod a+x 5.expect //给脚本执行权限
[[email protected] sbin]# ./5.expect 192.168.238.130 /tmp/12.txt //IP+文件名,只适合同步一个文件
spawn rsync -av /tmp/12.txt [email protected]:/tmp/12.txt
[email protected]‘s password:
sending incremental file list

sent 39 bytes received 11 bytes 100.00 bytes/sec
total size is 5 speedup is 0.10

三、构建文件分发系统
技术分享图片
list.txt文件里面的文件必须是全局路径,绝对路径
技术分享图片
文件分发系统的实现
首先构建rsync.expect的内容:
[[email protected] sbin]# vi rsync.expect
#!/usr/bin/expect
set passwd "123456"
set host [lindex $argv 0]
set file [lindex $argv 1]
spawn rsync -av --files-from=$file / [email protected]$host:/ //源目录是根,目标目录也是根
expect {
"yes/no" { send "yes
"}
"password:" { send "$passwd
" }
}
expect eof

[[email protected] sbin]# vi /tmp/file.list
文件内容里面要保证对方机器上也要有这个路径,文件有没有无所谓
/tmp/12.txt
/root/shell/1.sh
/root/123/11.txt
如果不能保证对方机器也有相同的文件,可以在rsync.expect里面增加R选项
spawn rsync -avR --files-from=$file / [email protected]$host:/

[[email protected] sbin]# vi /tmp/ip.list
192.168.238.130
127.0.0.1
做expect脚本的前提是保证这两台机器的密码是一样的,如果密码不一致,需要挨个定义每台机器的密码,但是这样做的坏处是如果脚本泄露,那么机器的密码被别人拿到,我们另外一个思路是给每个机器设置密钥认证,如果密钥认证的话,输密码的这一行"password:" { send "$passwd
" }可以省略

创建rsync.sh
技术分享图片
[[email protected] sbin]# vi rsync.sh
#!/bin/bash
for ip in cat /tmp/ip.list
do
./rsync.expect $ip /tmp/file.list
done
//shell内容主要是遍历IP地址
[[email protected] sbin]# chmod a+x rsync.expect //给脚本执行权限
[[email protected] sbin]# sh -x rsync.sh
如果有50台机器,那么每台机器都得执行下rsync.expect脚本,需要两个list文件,一个ip.llist,一个同步文件的file.list

四、批量远程执行命令
技术分享图片
命令批量执行
[[email protected] sbin]# vim exe.expect
#!/usr/bin/expect
set host [lindex $argv 0]
set passwd "123456"
set cm [lindex $argv 1]
spawn ssh [email protected]$host
expect {
"yes/no" { send "yes
"}
"password:" { send "$passwd
" }
}
expect "]"
send "$cm
"
expect "]
"
send "exit
"

//脚本解释:
set host [lindex $argv 0]中$argv 0是第一个参数;
set cm [lindex $argv 1]中$argv 1是第二个参数
[[email protected] sbin]# chmod a+x exe.expect //给脚本执行权限
技术分享图片
[[email protected] sbin]# vim exe.sh
#!/bin/bash
for ip in cat /tmp/ip.list
do
./exe.expect $ip "w;free -m;ls /tmp"
done


推荐阅读
  • 服务器部署中的安全策略实践与优化
    服务器部署中的安全策略实践与优化 ... [详细]
  • 技术日志:Ansible的安装及模块管理详解 ... [详细]
  • 在开发过程中,我最初也依赖于功能全面但操作繁琐的集成开发环境(IDE),如Borland Delphi 和 Microsoft Visual Studio。然而,随着对高效开发的追求,我逐渐转向了更加轻量级和灵活的工具组合。通过 CLIfe,我构建了一个高度定制化的开发环境,不仅提高了代码编写效率,还简化了项目管理流程。这一配置结合了多种强大的命令行工具和插件,使我在日常开发中能够更加得心应手。 ... [详细]
  • CentOS 7环境下Jenkins的安装与前后端应用部署详解
    CentOS 7环境下Jenkins的安装与前后端应用部署详解 ... [详细]
  • 本文介绍了如何利用Shell脚本高效地部署MHA(MySQL High Availability)高可用集群。通过详细的脚本编写和配置示例,展示了自动化部署过程中的关键步骤和注意事项。该方法不仅简化了集群的部署流程,还提高了系统的稳定性和可用性。 ... [详细]
  • 本文详细介绍了在CentOS 6.5 64位系统上使用阿里云ECS服务器搭建LAMP环境的具体步骤。首先,通过PuTTY工具实现远程连接至服务器。接着,检查当前系统的磁盘空间使用情况,确保有足够的空间进行后续操作,可使用 `df` 命令进行查看。此外,文章还涵盖了安装和配置Apache、MySQL和PHP的相关步骤,以及常见问题的解决方法,帮助用户顺利完成LAMP环境的搭建。 ... [详细]
  • 本文介绍了如何利用 Delphi 中的 IdTCPServer 和 IdTCPClient 控件实现高效的文件传输。这些控件在默认情况下采用阻塞模式,并且服务器端已经集成了多线程处理,能够支持任意大小的文件传输,无需担心数据包大小的限制。与传统的 ClientSocket 相比,Indy 控件提供了更为简洁和可靠的解决方案,特别适用于开发高性能的网络文件传输应用程序。 ... [详细]
  • 本文介绍了如何利用ObjectMapper实现JSON与JavaBean之间的高效转换。ObjectMapper是Jackson库的核心组件,能够便捷地将Java对象序列化为JSON格式,并支持从JSON、XML以及文件等多种数据源反序列化为Java对象。此外,还探讨了在实际应用中如何优化转换性能,以提升系统整体效率。 ... [详细]
  • 数字图书馆近期展出了一批精选的Linux经典著作,这些书籍虽然部分较为陈旧,但依然具有重要的参考价值。如需转载相关内容,请务必注明来源:小文论坛(http://www.xiaowenbbs.com)。 ... [详细]
  • 【Linux】CentOS 7 远程连接指南:高效安全的远程管理方法
    在 CentOS 7 中实现高效且安全的远程管理,本文详细介绍了如何检查和安装配置 OpenSSH。首先,通过 `yum list installed` 命令检查系统是否已安装 OpenSSH,若未安装,则使用 `yum install openssh-server` 进行安装。随后,配置 SSH 服务以确保其安全性和稳定性,包括修改默认端口、禁用 root 登录等关键步骤。此外,还提供了常见问题的解决方案,帮助用户顺利进行远程连接。 ... [详细]
  • 利用Python与Android进行高效移动应用开发
    通过结合Python和Android,可以实现高效的移动应用开发。首先,需要安装Scripting Layer for Android (SL4A),这是一个开源项目,旨在为Android系统提供脚本语言支持。SL4A不仅简化了开发流程,还允许开发者使用Python等高级语言编写脚本,从而提高开发效率和代码可维护性。此外,SL4A还支持多种其他脚本语言,进一步扩展了其应用范围。通过这种方式,开发者可以快速构建功能丰富的移动应用,同时保持较高的灵活性和可扩展性。 ... [详细]
  • Shell参数详解与应用
    本文详细介绍了Shell参数的种类及其应用,内容简洁明了,结构清晰。通过深入解析各类参数的功能和使用方法,旨在帮助读者更好地理解和掌握Shell编程技巧,提升实际操作能力。 ... [详细]
  • 在项目开发过程中,掌握一些关键的Linux命令至关重要。例如,使用 `Ctrl+C` 可以立即终止当前正在执行的命令;通过 `ps -ef | grep ias` 可以查看特定服务的进程信息,包括进程ID(PID)和JVM参数(如内存分配和远程连接端口);而 `netstat -apn | more` 则用于显示网络连接状态,帮助开发者监控和调试网络服务。这些命令不仅提高了开发效率,还能有效解决运行时的各种问题。 ... [详细]
  • Amoeba 通过优化 MySQL 的读写分离功能显著提升了数据库性能。作为一款基于 MySQL 协议的代理工具,Amoeba 能够高效地处理应用程序的请求,并根据预设的规则将 SQL 请求智能地分配到不同的数据库实例,从而实现负载均衡和高可用性。该方案不仅提高了系统的并发处理能力,还有效减少了主数据库的负担,确保了数据的一致性和可靠性。 ... [详细]
  • 本文深入探讨了 hCalendar 微格式在事件与时间、地点相关活动标记中的应用。作为微格式系列文章的第四篇,前文已分别介绍了 rel 属性用于定义链接关系、XFN 微格式增强链接的人际关系描述以及 hCard 微格式对个人和组织信息的描述。本次将重点解析 hCalendar 如何通过结构化数据标记,提高事件信息的可读性和互操作性。 ... [详细]
author-avatar
哥小名叫青蛙
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有