脚本如下:
- #!/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>&- 关闭有名管道
转载于:https://blog.51cto.com/lihuipeng/902627