且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

shell 并发脚本

更新时间:2022-10-02 13:27:37

 脚本如下:


  1. #!/bin/bash 
  2.  
  3. PARALLEL=3 
  4. TMPFILE=$$.fifo  
  5. FAILURE_FLAG=failure.log 
  6.  
  7. function trap_exit 
  8. kill -9 0 
  9.  
  10. trap 'trap_exit; exit 2' 1 2 3 15 
  11.  
  12. rm -f ${FAILURE_FLAG} 
  13.  
  14. mkfifo $TMPFILE 
  15. exec 4<>$TMPFILE 
  16.  
  17. rm -f $TMPFILE 
  18.  
  19.         count=$PARALLEL 
  20.         while [ $count -gt 0 ] 
  21.         do 
  22.                 echo  
  23.                 let count=$count-1 
  24.         done 
  25. } >&4 
  26.  
  27. for file in 20120611 20120612 20120613 20120614 20120615 20120616 
  28. do 
  29.         read <&4 
  30.         ( scp ${file}/${file}_wisp.tar.gz root@192.168.1.100:/tmp || echo ${file}>>${FAILURE_FLAG} ; echo >&4 ) & 
  31. done 
  32.  
  33. wait 
  34. exec 4>&- 
  35.  
  36. if [ -f ${FAILURE_FLAG} ] 
  37. then 
  38.         exit 1 
  39. else 
  40. fi 

PARALLEL=3        定义并发进程数为3个

TMPFILE=$$.fifo   定义有名管道名称

function trap_exit  捕捉退出信号

mkfifo $TMPFILE   建立有名管道

exec 4<>$TMPFILE   给有名管道绑定标志4

然后就是往 4 里面写 PARALLEL=3 个空格

read <&4 读出一个空行,表示占用了一个进程

echo >&4 执完后命令后补回一个空行,表示释放一个进程

wait 待上面的操作完成后再执行下面的操作

exec 4>&- 关闭有名管道

本文转自运维笔记博客51CTO博客,原文链接http://blog.51cto.com/lihuipeng/902627如需转载请自行联系原作者


lihuipeng