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