shell多线程实现从ftp下载数据

简介:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#!/bin/bash
function  DownLoad()
{
local  url=$1
local  dirpath=$2
wget -- ftp -user=gsics  -- ftp -password=gsics \
-c -r -q -e  robots=off --reject= "index.html*"   \
--tries=5 \
--timeout=20 \
--waitretry=10 \
--wait=3 \
--no-parent \
-nd -nH --dont-remove-listing \
--directory-prefix=${dirpath} \
${url}
}
psname=$0
psNum=` ps  aux | grep  ${psname}| wc  -l`
if  [ $psNum -gt 3 ]
then
cdir=` pwd `
echo  'Process is Running .'  >${cdir} /tmp .log
echo  ` date ` >>${cdir} /tmp .log
exit
fi
DATADIR= /nas03/v6/AQUA/MODIS/L1/ORBIT
thread=5
if  [ $ # -eq 2 ];then
stime=$1
etime=$2
else
stime=` date  -- date = "-16 day"   +%Y%m%d`
etime=` date  -- date = "-1 day"  +%Y%m%d`
fi
let  Flag=0
while  :
do
if  [ ${Flag} - eq  1 ]; then
                 stime=$( date  -d  "$stime 1day"   +%Y%m%d)
         fi
         let  Flag=1
stime=$( date  -d  "$stime 1day"   +%Y%m%d)
         if  [[ $stime -gt $etime ]];  then
                 break
         fi
cat  > ftpawx33.tmp << EOF
user gsics gsics
as
cd  /AQUA/MODIS/L1/ORBIT/ ${stime:0:6}
nlist 
quit
EOF
echo  ${stime}
jjj=` date  -d  "${stime}"  +%j`
         ftp  - v  -n -i  10.0.66.33 < ftpawx33.tmp > ftpnamelist33.info
cat  ftpnamelist33.info |  grep  "^MYD"  grep  ".A${stime:0:4}${jjj}"  grep  ".006."  >namelist33.txt
if  [[ ! -s namelist33.txt ]]
         then
                 continue ;
         fi
if  [ ! -d  $DATADIR/${stime:0:6} ]
then
mkdir  -p $DATADIR/${stime:0:6}
fi
DirPath=$DATADIR/${stime:0:6}/
declare  -a order_array
let  jj=0
for  Name  in  ` cat  namelist33.txt`
do
url= ftp : //10 .0.66.33: /AQUA/MODIS/L1/ORBIT/ ${stime:0:6}/$Name
order_array[$jj]=${url}
let  jj=${jj}+1
done
if  [ ${ #order_array[@]} -eq 0 ];then
unset  ${order_array}
continue
fi
tmp_fifofile= "/tmp/$$.fifo"
mkfifo   $tmp_fifofile
exec  6<> $tmp_fifofile
rm   $tmp_fifofile
for   ((i=0 ;i<$thread ;i++ ));
do
     echo 
done  >&6
for   ((i = 0 ;i < ${ #order_array[@]};i++ ));
do
     read  -u6
     {
         DownLoad ${order_array[$i]} ${DirPath}
         echo  >&6
     }&
done
wait
exec   6>&-
unset  ${order_array}
done









本文转自 SoulMio 51CTO博客,原文链接:http://blog.51cto.com/bovin/1937467,如需转载请自行联系原作者
目录
相关文章
|
14天前
|
数据采集 Java API
Jsoup库能处理多线程下载吗?
Jsoup库能处理多线程下载吗?
|
3月前
|
消息中间件 监控 安全
服务Down机了,线程池中的数据如何保证不丢失?
在分布式系统与高并发应用开发中,服务的稳定性和数据的持久性是两个至关重要的考量点。当服务遭遇Down机时,如何确保线程池中处理的数据不丢失,是每一位开发者都需要深入思考的问题。以下,我将从几个关键方面分享如何在这种情况下保障数据的安全与完整性。
74 2
|
24天前
|
消息中间件 监控 Java
线程池关闭时未完成的任务如何保证数据的一致性?
保证线程池关闭时未完成任务的数据一致性需要综合运用多种方法和机制。通过备份与恢复、事务管理、任务状态记录与恢复、数据同步与协调、错误处理与补偿、监控与预警等手段的结合,以及结合具体业务场景进行分析和制定策略,能够最大程度地确保数据的一致性,保障系统的稳定运行和业务的顺利开展。同时,不断地优化和改进这些方法和机制,也是提高系统性能和可靠性的重要途径。
116 62
|
4月前
|
数据采集 XML JavaScript
C# 中 ScrapySharp 的多线程下载策略
C# 中 ScrapySharp 的多线程下载策略
|
2月前
|
缓存 安全 Java
使用 Java 内存模型解决多线程中的数据竞争问题
【10月更文挑战第11天】在 Java 多线程编程中,数据竞争是一个常见问题。通过使用 `synchronized` 关键字、`volatile` 关键字、原子类、显式锁、避免共享可变数据、合理设计数据结构、遵循线程安全原则和使用线程池等方法,可以有效解决数据竞争问题,确保程序的正确性和稳定性。
55 2
|
6月前
|
缓存 NoSQL Java
Java高并发实战:利用线程池和Redis实现高效数据入库
Java高并发实战:利用线程池和Redis实现高效数据入库
522 0
|
3月前
|
消息中间件 存储 Java
服务重启了,如何保证线程池中的数据不丢失?
【8月更文挑战第30天】为确保服务重启时线程池数据不丢失,可采用数据持久化(如数据库或文件存储)、使用可靠的任务队列(如消息队列或分布式任务队列系统)、状态监测与恢复机制,以及分布式锁等方式。这些方法能有效提高系统稳定性和可靠性,需根据具体需求选择合适方案并进行测试优化。
234 5
|
4月前
处理串口线程数据的函数
【8月更文挑战第4天】处理串口线程数据的函数。
32 4
|
5月前
|
Shell Linux
shell 同时执行多任务下载视频
shell 同时执行多任务下载视频
63 4
|
4月前
|
数据处理 Python
解锁Python多线程编程魔法,告别漫长等待!让数据下载如飞,感受科技带来的速度与激情!
【8月更文挑战第22天】Python以简洁的语法和强大的库支持在多个领域大放异彩。尽管存在全局解释器锁(GIL),Python仍提供多线程支持,尤其适用于I/O密集型任务。通过一个多线程下载数据的例子,展示了如何使用`threading`模块创建多线程程序,并与单线程版本进行了性能对比。实验表明,多线程能显著减少总等待时间,但在CPU密集型任务上GIL可能会限制其性能提升。此案例帮助理解Python多线程的优势及其适用场景。
45 0