shell模拟多进程(1)

简介:

场景:
由于需要把http://x.x.x.x//VipProcessData/BasicObject/下的所有内容同步到远程另一个机器。BasicObject/目录下有9个目录每个目录下有200~1000个文件不等 文件小的几十k大的几百兆 总计270G
测试wget   xxxxxxx 只有1M/s的速度 如果同时启动n个wget  xxxxx基本能打到nM/s的速度。
由于"AreaObject  ClassObject  FullTextObject  FundObject  MediaObject  OrganObject“几个子目录下文件总计都不大 加起来也只有4~5G 因此这几个目录使用
wget -m -np  -c -nH  http://x.x.x.x/VipProcessData/BasicObject/$name/ ;下载
而其他几个目录 先把文件整理成url列表 然后以
wget -c -i /url1的方式来下载。


shell 以
{}&来模拟一个进程
因此:


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
################以下是脚本#############################
#!/bin/bash
#file /usr/local/data/VipProcessData/wget.sh
base= /usr/local/data/    #定义基本保存路径
dir = "AreaObject  ClassObject  FullTextObject  FundObject  MediaObject  OrganObject"   定义需要使用wget -m -np  -c -nH 来下载的目录名
for  name  in  $ dir
do
{
cd  "$base"
wget -m -np  -c -nH  http: //x .x.x.x /VipProcessData/BasicObject/ $name/
}&   #实际循环启动了6个后台进程执行wget -m -np  -c -nH  http://x.x.x.x/VipProcessData/BasicObject/$name/
done
wait   #等待进程执行完成
echo  "finshed the  data AreaObject  ClassObject  FullTextObject  FundObject  MediaObject  OrganObject downloading"
{
cd  /usr/local/data/VipProcessData/BasicObject/SubjectObject   &&  wget -c -i  /usr/local/wget/SubjectObject01
}&   #启动1个进程执行wget -c -i /usr/local/wget/SubjectObject01
{
cd  /usr/local/data/VipProcessData/BasicObject/SubjectObject   &&  wget -c -i  /usr/local/wget/SubjectObject02
}&   #启动1个进程执行wget -c -i /usr/local/wget/SubjectObject02
{
cd  /usr/local/data/VipProcessData/BasicObject/SubjectObject   &&  wget -c -i  /usr/local/wget/SubjectObject03
}&   # 启动1个进程执行wget -c -i /usr/local/wget/SubjectObject03
{
cd  /usr/local/data/VipProcessData/BasicObject/SubjectObject   &&  wget -c -i  /usr/local/wget/SubjectObject04
}&  # 启动1个进程执行wget -c -i /usr/local/wget/SubjectObject04
{
cd  /usr/local/data/VipProcessData/BasicObject/WriterObject   &&  wget -c -i  /usr/local/wget/WriterObject01
}&  # 启动1个进程执行wget -c -i /usr/local/wget/SubjectObject05
wait  等待上述5个进程执行完
echo  "finshed thr data of WriterObject and SubjectObject"
{
cd  /usr/local/data/VipProcessData/BasicObject/TitleObject   &&  nohup   wget -c -i  /usr/local/wget/TitleObject01
}&     #启动1个进程执行wget
{
cd  /usr/local/data/VipProcessData/BasicObject/TitleObject   &&  nohup   wget -c -i  /usr/local/wget/TitleObject02
}&    #启动1个进程执行wget
{
cd  /usr/local/data/VipProcessData/BasicObject/TitleObject   &&  nohup   wget -c -i  /usr/local/wget/TitleObject03
}&   #启动1个进程执行wget
{
cd  /usr/local/data/VipProcessData/BasicObject/TitleObject   &&  nohup   wget -c -i  /usr/local/wget/TitleObject04
}&   #启动1个进程执行wget
{
cd  /usr/local/data/VipProcessData/BasicObject/TitleObject   &&  nohup   wget -c -i  /usr/local/wget/TitleObject05
}&   #启动1个进程执行wget
{
cd  /usr/local/data/VipProcessData/BasicObject/TitleObject   &&  nohup   wget -c -i  /usr/local/wget/TitleObject06
}&   #启动1个进程执行wget
wait  等待上述6个进程执行完
echo  "finshed thr data of TitleObject"
echo  ”all data download finshed“
##############以上是脚本#############################

可以看出 脚本先后同时启动n个进程,待进程全部结束后再启动n个进程。缺点,不能保障n个进程每次都能同时或者接近同时完成。因此实际上 上述脚本理论上最大的下载速度是6m/s (最开始同时启动了6个进程)之后就再也没有过同时达到6m/s的下载速度了。






目录遍历

1
2
3
4
5
6
7
dir = /usr/local/data
for  name  in  ` ls  $ dir `
do
{
cd  $ dir /$name
.......
}

      本文转自天山三害 51CTO博客,原文链接:http://blog.51cto.com/skybug/1337785,如需转载请自行联系原作者





相关文章
|
5月前
|
Shell
shell中并发执行多个进程
shell中并发执行多个进程
550 4
|
5月前
|
监控 Shell
在Shell中自动重启进程
在Shell中自动重启进程
462 1
|
5月前
|
Shell Linux 调度
【Shell 命令集合 系统管理 】Linux 调整进程优先级 renice命令 使用指南
【Shell 命令集合 系统管理 】Linux 调整进程优先级 renice命令 使用指南
118 0
|
5月前
|
存储 监控 Linux
【Shell 命令集合 系统管理 】⭐⭐⭐Linux 查看当前正在运行的进程信息 ps命令 使用指南
【Shell 命令集合 系统管理 】⭐⭐⭐Linux 查看当前正在运行的进程信息 ps命令 使用指南
106 0
|
5月前
|
存储 Shell Linux
【Shell 命令集合 系统设置 】⭐⭐⭐Linux 限制进程资源 ulimit命令 使用指南
【Shell 命令集合 系统设置 】⭐⭐⭐Linux 限制进程资源 ulimit命令 使用指南
99 0
|
5月前
|
监控 Shell Linux
【Shell 命令集合 系统管理 】⭐⭐⭐Linux 向进程发送信号 kill命令 使用指南
【Shell 命令集合 系统管理 】⭐⭐⭐Linux 向进程发送信号 kill命令 使用指南
85 0
|
5月前
|
Shell Linux 开发工具
linux shell脚本利用 kill -0 检查进程是否存在
linux shell脚本利用 kill -0 检查进程是否存在
191 1
|
4月前
|
Unix Shell Perl
技术心得:实例解析shell子进程(subshell)
技术心得:实例解析shell子进程(subshell)
|
4月前
|
Shell Linux
【linux】进程替换的应用|shell解释器的实现
【linux】进程替换的应用|shell解释器的实现
31 0
|
5月前
|
Shell Linux
【Linux】进程实践项目(更新中) — 自主shell编写
前几篇文章,我们学习进程的相关知识:进程概念,进程替换,进程控制。熟悉了进程到底是个什么事情,接下来我们来做一个实践,来运用我们所学的相关知识。这个项目就是手搓一个shell模块,模拟实现Xshell中的命令行输入。
58 1