shell脚本并发

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell脚本并发相关的知识,希望对你有一定的参考价值。

#!/bin/bash
# Filename: bingfa.sh
# Time: 2016/03/9 18:59:05

ip=`cat /tmp/iplist`           # 过滤服务器IP
dir=‘/tmp‘                # 目标路径
                                
thead_num=10               # 自定义并发数,根据自身服务器性能或应用调整大小,开始千万别定义太大,避免管理机宕机
tmp_fifo_file="/tmp/$$.fifo"       # 以进程ID号命名管道文件
mkfifo $tmp_fifo_file          # 创建临时管道文件
exec 4<>$tmp_fifo_file          # 以读写方式打开tmp_fifo_file管道文件,文件描述符为4,也可以取3-9任意描述符
rm -f $tmp_fifo_file          # 删除临时管道文件,也可不删除

for ((i=0;i<$thead_num;i++)); do    # 利用for循环向管道中输入并发数量的空行
  echo ""               # 输出空行
done >&4                 # 输出重导向到定义的文件描述符4上

# 真正的要执行的所有命令在下面的大括号中
for i in $ip; do           # 循环所有要执行的服务器
  read -u4               # 从管道中读取行,每次一行,所有行读取完毕后执行挂起,直到管道有空闲的行
    {                 # 大括号里面就是所有要执行的命令
     echo $i            # 显示主机ip 
     scp $1 $i:$dir        # scp是一个简单实例,执行脚本时$1传入一个变量值,可替换任意其他命令及命令组
     ssh $i -n ‘date‘       # 打印时间
     sleep 3            # 暂停3秒,给系统缓冲时间,达到限制并发进程数量
     echo "" >&4          # 再写入一个空行,使挂起的循环继续执行
    }&                 # 放入后台执行
done

wait                   # 等待所有后台进程执行完成
exec 4>&-                # 删除文件描述符
exit 0
sh bingfa.sh /tmp/test.txt # 执行脚本


本文出自 “行 者--->” 博客,请务必保留此出处http://liumissyou.blog.51cto.com/4828343/1749253

以上是关于shell脚本并发的主要内容,如果未能解决你的问题,请参考以下文章

Linux下模拟多线程的并发并发shell脚本

shell脚本并发

Linux脚本学习案例shell脚本多通道并发执行存储过程

Shell脚本中的并发

Linux用shell脚本监控网站运行状态并发告警邮件

Shell脚本中的多任务并发执行