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,如需转载请自行联系原作者
目录
相关文章
|
数据采集 Java API
Jsoup库能处理多线程下载吗?
Jsoup库能处理多线程下载吗?
|
开发者 Windows
NDM多线程下载器!实用的下载器,绿色版下载及安装教程
NDM是一款小巧高效的多线程下载器,支持Windows、Mac及浏览器插件,绿色单文件仅904KB,无需安装。已汉化,操作简单,下载速度快,支持HTTP/HTTPS/FTP协议,不支持磁力链接。使用前需关闭杀毒软件,配合7-ZIP解压,浏览器插件可自动嗅探音视频资源。
3773 2
|
Java 索引
多线程向设备发送数据
多线程向设备发送数据
235 0
|
消息中间件 监控 安全
服务Down机了,线程池中的数据如何保证不丢失?
在分布式系统与高并发应用开发中,服务的稳定性和数据的持久性是两个至关重要的考量点。当服务遭遇Down机时,如何确保线程池中处理的数据不丢失,是每一位开发者都需要深入思考的问题。以下,我将从几个关键方面分享如何在这种情况下保障数据的安全与完整性。
475 2
|
数据采集 XML JavaScript
C# 中 ScrapySharp 的多线程下载策略
C# 中 ScrapySharp 的多线程下载策略
|
数据采集 监控 调度
干货分享“用 多线程 爬取数据”:单线程 + 协程的效率反超 3 倍,这才是 Python 异步的正确打开方式
在 Python 爬虫中,多线程因 GIL 和切换开销效率低下,而协程通过用户态调度实现高并发,大幅提升爬取效率。本文详解协程原理、实战对比多线程性能,并提供最佳实践,助你掌握异步爬虫核心技术。
|
消息中间件 监控 Java
线程池关闭时未完成的任务如何保证数据的一致性?
保证线程池关闭时未完成任务的数据一致性需要综合运用多种方法和机制。通过备份与恢复、事务管理、任务状态记录与恢复、数据同步与协调、错误处理与补偿、监控与预警等手段的结合,以及结合具体业务场景进行分析和制定策略,能够最大程度地确保数据的一致性,保障系统的稳定运行和业务的顺利开展。同时,不断地优化和改进这些方法和机制,也是提高系统性能和可靠性的重要途径。
489 62
|
缓存 安全 Java
使用 Java 内存模型解决多线程中的数据竞争问题
【10月更文挑战第11天】在 Java 多线程编程中,数据竞争是一个常见问题。通过使用 `synchronized` 关键字、`volatile` 关键字、原子类、显式锁、避免共享可变数据、合理设计数据结构、遵循线程安全原则和使用线程池等方法,可以有效解决数据竞争问题,确保程序的正确性和稳定性。
521 57
|
SQL 数据建模 BI
【YashanDB 知识库】用 yasldr 配置 Bulkload 模式作单线程迁移 300G 的业务数据到分布式数据库,迁移任务频繁出错
问题描述 详细版本:YashanDB Server Enterprise Edition Release 23.2.4.100 x86_64 6db1237 影响范围: 离线数据迁移场景,影响业务数据入库。 外场将部分 NewCIS 的报表业务放到分布式数据库,验证 SQL 性能水平。 操作系统环境配置: 125G 内存 32C CPU 2T 的 HDD 磁盘 问题出现的步骤/操作: 1、部署崖山分布式数据库 1mm 1cn 3dn 单线启动 yasldr 数据迁移任务,设置 32 线程的 bulk load 模式 2、观察 yasldr.log 是否出现如下错