脚本如下:
- #!/bin/bash
-
- PARALLEL=3
-
TMPFILE=$$.fifo
- FAILURE_FLAG=failure.log
-
- function trap_exit
- {
- kill -9 0
- }
-
- trap 'trap_exit; exit 2' 1 2 3 15
-
- rm -f ${FAILURE_FLAG}
-
- mkfifo $TMPFILE
- exec 4<>$TMPFILE
-
- rm -f $TMPFILE
-
- {
- count=$PARALLEL
- while [ $count -gt 0 ]
- do
- echo
- let count=$count-1
- done
- } >&4
-
- for file in 20120611 20120612 20120613 20120614 20120615 20120616
- do
- read <&4
- ( scp ${file}/${file}_wisp.tar.gz root@192.168.1.100:/tmp || echo ${file}>>${FAILURE_FLAG} ; echo >&4 ) &
- done
-
- wait
- exec 4>&-
-
- if [ -f ${FAILURE_FLAG} ]
- then
- exit 1
- else
- 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