Linux下模拟多线程的并发并发shell脚本
分享一个在Linux下模拟多线程的并发脚本,使用这个脚本可以同时批量执行相关命令,比起普通for/while循环只能顺序一条一条执行的效率高,在管理大批服务器时非常的实用。
以下脚本功能是通过scp(也可选rsync)向上千台服务器传更新包,脚本运行后同时在后台有50个scp进程向服务器传包。
#!/bin/bash #过滤服务器IP ip=`cat iplist.txt|grep -v "#"|awk '{print $1}'` #目标路径 dir='/usr/local/src' #自定义并发数,根据自身服务器性能或应用调整大小,开始千万别定义太大,避免管理机宕机 thead_num=50 #以进程ID号命名管道文件 tmp_fifo_file="/tmp/$$.fifo" #创建临时管道文件 mkfifo $tmp_fifo_file #以读写方式打开tmp_fifo_file管道文件,文件描述符为4,也可以取3-9任意描述符 exec 4<>$tmp_fifo_file #删除临时管道文件,也可不删除 rm -f $tmp_fifo_file #利用for循环向管道中输入并发数量的空行 for ((i=0;i<$thead_num;i++)) do #输出空行echo "" #输出重导向到定义的文件描述符4上 done >&4 #循环所有要执行的服务器 for i in $ip do #从管道中读取行,每次一行,所有行读取完毕后执行挂起,直到管道有空闲的行read -u4 { #所有要批量执行的命令都放在大括号内,scp是一个简单实例,可替换任意其他命令及命令组,1000为服务器端的端口scp -P 1000 $1 $i:$dir #暂停3秒,给系统缓冲时间,达到限制并发进程数量 sleep 3 #再写入一个空行,使挂起的循环继续执行echo "" >&4 }& #放入后台执行 donewait #等待所有后台进程执行完成 exec 4>&- #删除文件描述符 exit 0
--------------------------------低调的分割线------------------------------------
如果管理机与其他服务器没有建立ssh信任,也可将expect自动应答命令添加到并发脚本的循环体当中,修改如下:
#!/bin/baship=`cat iplist.txt|grep -v "#"|awk '{print $1}'`dir='/usr/local/src'answer="yes" #定义yes/no应答变量 passwd="123456" #服务器密码 thead_num=50tmp_fifo_file="/tmp/$$.fifo"mkfifo $tmp_fifo_fileexec 4<>$tmp_fifo_filerm -f $tmp_fifo_filefor ((i=0;i<$thead_num;i++))doecho ""done >&4for i in $ipdoread -u4{expect <<EOFset timeout -1spawn scp -P 1000 $1 $i:$direxpect "(yes/no)?" {send "$answer\r"expect "Password:"send "$passwd\r"} "Password:" {send "$passwd\r"} "*host" {exit 1}expect eofEOFsleep 3echo "" >&4}&donewaitexec 4>&- exit 0
转载于:https://blog.51cto.com/bronte/1440783
Linux下模拟多线程的并发并发shell脚本相关推荐
- linux脚本查看系统内存,二个linux下查看内存使用情况的shell脚本()
摘要 腾兴网为您分享:二个linux下查看内存使用情况的shell脚本(),政务易,悦作业,优化大师,王者荣耀等软件知识,以及单向历app,优路教育app,kimoji,开关电源设计软件,皮皮高清影视 ...
- linux下开机自动启动,定时运行shell脚本
Shell 脚本与window/dos 下的批处理相似,也就是用各类命令预先放入一个文件中,方便一次性执行的的一个程序文件,主要是方便管理员进行设置或者管理用. 一.shell脚本 在Linux下,我 ...
- Linux下为文件增加列的shell脚本
场景:linux有份文件,需要增加一列序号来标记,通过shell脚本来实现. 步骤: 1)创建一份test.txt文件,内含一列,如下: bash-4.1$ cat test.txt a b c d ...
- linux下进行oracle的逻辑备份shell脚本
1.创建一个脚本schema_exp.sh [oracle@localhost ~]$ ls afiedt.buf hot_backup.sh rman_backup.sh ...
- linux下的ping脚本,Linux下检测服务器Ping值的Shell脚本
这个月我们连续增加了4台国外服务器,让每台服务器的负载更低一些,这样网民和搜索引擎访问更顺畅,利于流量和广告收入的提升. 我今年早几个月曾经在网上找了一段检测Ping的代码,稍微改了一下适应我们的需要 ...
- Linux下的多线程编程
1 引言 线程(thread)技术早在60年代就被提出,但真正应用多线程到操作系统中去,是在80年代中期,solaris是这方面的佼佼者.传统的Unix也支持线程的概念,但是在一个进程(process ...
- Linux下实现多线程的生产者消费者问题
Linux下实现多线程的生产者消费者问题 一.原理的理解 生产者-消费者问题是一个经典的线程同步问题,该问题最早由Dijkstra提出,用以演示他提出的信号量机制.在同一个线程地址空间内执行的两个线程 ...
- linux模拟cpu过载,linux下模拟CPU占用100%小程序
linux下模拟CPU占用100%小程序 来源:https://blog.csdn.net/lin434406218/article/details/54694900 一.单个核100% 代码kill ...
- [原创]手把手教你Linux下的多线程设计--Linux下多线程编程详解(一)
本文可任意转载,但必须注明作者和出处. [原创]手把手教你Linux下的多线程设计(一) --Linux下多线程编程详解 原 ...
- linux下tomcat脚本,Linux下重启多个 tomcat 服务的脚本(推荐)
由于修改tomcat的配置文件或手动操作数据库数据后,tomcat的缓存和redis的缓存很严重,需要经常重启tomcat来释放缓存,经常就是手动重启. # 1.查找tomcat的进程ID ps -e ...
最新文章
- 西湖大学能招本科生了!首次确定 5 大本科专业
- linux 终端 含义,ubuntu终端中@前后的字符串含义及修改-布布扣-bubuko.com
- 解决jquery版本冲突问题
- Windows Server 2008 R2 DHCP服务器安装和配置案例
- 最优化理论与方法(part5)--函数和微分
- python 发送邮件附件及文字信息
- 超实用编程技术指南!为什么你还学不会一门编程语言?
- jqGrid数据列表和表单的列隐藏/显示
- 《SEM长尾搜索营销策略解密》一一2.10 小领域文化进入红利期
- 解决谷歌自带翻译不出现问题
- Android persistent机制
- 如何通过PTTools显示正在种子的PT网站
- 在浏览器输入localhost:3000显示需要新应用打开此localhost原因
- 增量学习简介(incremental learning)
- sap客户信贷_通过SAP ABAP接口修改客户信贷主数据
- fiddler重放请求
- Windows安裝SourceTree
- NOI 国家集训队论文集
- 如何读一个JavaWeb项目源代码
- MQ Reason code list
热门文章
- IDL | 语句练习
- JS学习总结(8)——数组
- 【空间分析】3 专题数据的数据分级
- html怎么设置自动音乐播放器,运用js教你轻松制作html音乐播放器
- 实习踩坑之路:一个ElasticSearchJava客户端的批量处理操作bulkIndexAsync引发的内存泄漏的血案
- 计算机网络(HTTP、TCP)的连接管理
- Mac配置adb笔记,彻底解决zsh: command not found: adb问题
- 如何从小白进化成 Apache Flink 技术专家?9节基础课程免费公开!
- FFmpeg总结(十三)用ffmpeg基于nginx实现直播功能,推流拉流
- ad怎么导入cad的外形尺寸_EPLAN与传统CAD的性能比较分析