高手问题:shell脚本如何多线程可监控下载文件

sh/bash/dash/ksh/zsh等Shell脚本
回复
yubinalice
帖子: 112
注册时间: 2015-12-23 16:20
系统: ubuntu 16.04
送出感谢: 1 次
接收感谢: 0

高手问题:shell脚本如何多线程可监控下载文件

#1

帖子 yubinalice » 2018-01-30 16:08

使用shell写批量下载脚本,
目前是单线程下载,脚本实例如下:

---------------------------------------
#!/bin/bash
for r in {1..300}
do
for i in {1..10}
do
echo $r file
echo $i time
you-get `sed -n ${r}p urls`
if [ $? == 0 ]
then
find -size +300M -exec mv {} /dest \; &
break
fi
done
done
-----------------------------------------

上面这个脚本只能单线程下载视频,因此速度必定有限,而且当视频进行合并的时候,还会空闲,浪费带宽。
因此希望可以写出3线程的下载脚本。

理想的模式是类似aria2的rpc那种模式,进程一直开着,多线程下载,然后前端监控,这样就知道具体每个文件的情况。
最好能够给you-get指定高速缓存设备,这样就能够加快合并的速度了。
希望写出的多线程下来脚本能够监控每个文件的下载进度。不要弄出那种3个文件同时下载,但是只有一个文件能够查看下载状态的情况。

高手看看!
头像
maplebeats
帖子: 372
注册时间: 2011-02-16 1:17
送出感谢: 0
接收感谢: 6 次

Re: 高手问题:shell脚本如何多线程可监控下载文件

#2

帖子 maplebeats » 2018-02-06 11:58

标准输出到三个文件里再汇总?
My blog : OOXX
头像
冲浪板
论坛版主
帖子: 7466
注册时间: 2007-05-06 8:19
送出感谢: 0
接收感谢: 5 次

Re: 高手问题:shell脚本如何多线程可监控下载文件

#3

帖子 冲浪板 » 2018-02-11 13:17

楼主是要下载资源是么,干嘛不试下wget,
可以断点续传,可以设置多个线下载,可去后台。
kidkey
帖子: 28
注册时间: 2017-09-21 14:46
系统: ubuntu16.04
送出感谢: 5 次
接收感谢: 0

Re: 高手问题:shell脚本如何多线程可监控下载文件

#4

帖子 kidkey » 2018-04-30 19:00

shell 是单线程语言.不过可以伪造多进程 网上学来的 利用后台+wait

试试这个 秒级 探测活跃主机

代码: 全选

#!/bin/bash
# ******************************************************
# Author       : kids
# Last modified: 2018-04-30 18:42
# Email        : ak871933839@163.com
# Filename     : fping.sh
# Description  : 
# ******************************************************

for i in `seq 1 254`
        do
                {
                        fping -t 30 192.168.31.$i >/dev/null 2>&1
                        [ $? -eq 0 ]&&{
                                echo "192.168.31.$i is up"
                        }
                }&

        done
        wait
             
一个c类网段,254主机,1s内探测完毕.

代码: 全选

kids@kids-virtual-machine:~/桌面$ time sh fping.sh 
192.168.31.1 is up
192.168.31.22 is up
192.168.31.216 is up
192.168.31.137 is up

real	0m0.407s
user	0m0.306s
sys	0m0.177s
kids@kids-virtual-machine:~/桌面$ 
回复

回到 “Shell脚本”