shell并发上传ftp

2年前在蓝汛的时候管理的一个CDN节点, 因某些特殊原因, 没有采用蓝汛标准的系统管理方法...

为了解决日志收集的问题, 自己写了一个shell并发的小脚本....

有时日志传输会出现一些问题, 会产生一些日志堆积,  有时上千个~...单进程传输效率实在太底下了..就写了这么一个脚本...

主要并发是, 通过判断要传的目录下有多少个文件, 当前运行的进程是多少个, 达到上限就等待...不足上限就继续传...

#!/bin/bash
# Chinacache CPIS-OPT
# $Id: upload_log.sh 2012-9-18 19:10 HGL

#---------------------------------------------------------------------------|
#  @Program   : upload_log.sh                                               |  
#  @Version   : 1.0.1                                                       |
#  @Company   : china cache                                                 |
#  @Dep.      : CPIS-OPT                                                    |
#  @Writer    : Kevin.han                                                   |
#  @Date      : 2012-9-18                                                   |
#---------------------------------------------------------------------------|


log_dir=/data/proclog/log/squid/access/.upload/.CPISNLA
user=123
pass=123
ftpip="1.1.1.1:21"
init=1
max=5
logdir=( `ls $log_dir` )

for (( i=0;i<=$init;i++ ));do
	if [ $i -ge ${#logdir[@]} ];then
		exit 0
	fi

	lftp ftp://${user}:${pass}@${ftpip} -e "cd 2nd_edition/temp;put -c -E ${log_dir}/${logdir[$i]} -o ${logdir[$i]}.tmp;mv ${logdir[$i]}.tmp ${logdir[$i]};exit"  &

	if [ $i -eq $init ];then
                        a=`ps -eo command|grep lftp|grep -v grep|wc -l`
                while (( $a > 10 ));do
                        sleep 5
                        a=`ps -eo command|grep lftp|grep -v grep|wc -l`
                done
		let b=${#logdir[@]}-$i
		if [ $max -ge $b ];then
	                let init=$init+$b
		else
			let init=$init+$max
		fi	
	fi
done

 


本文出自 “晓风残月” 博客,请务必保留此出处http://kinda22.blog.51cto.com/2969503/1582561

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。